Besoin d'aide ?

clause wherein dans query sql

Avatar de joflll
joflll

Bonjour, Je suis sous Laravel 5 et j'essaie d'intégrer une clause wherein à une query mysql:

	$sections = explode(',', '1,2,3');

	$results = DB::table("test")
    ->select('test.*')
	->selectRaw("
            6371 * acos( 
				round(
                (((cos( radians(  ?  ) ) *
                cos( radians( Latitude ) )) * 
                cos( radians( ? ) - radians(Longitude) )) + 
                (sin( radians(  ?  ) ) *
                sin( radians( Latitude ) ) )
				), 10)
            ) AS Distance")
	->whereIn('type', [$sections])
	->having("Distance", "<", "?")
    ->orderBy("Distance")
    ->setBindings([$lat, $lng, $lat, $radius])
    ->get();

Ca marche très bien quand j'enlève la clause wherein mais dès que je la met j'ai pas de message d'erreur mais plus aucun résultat alors que j'ai des correspondances sur les type demandés. Sur la bdd, type est un unsigned int.

Merci à vous

Avatar de MaitrePylos
MaitrePylos

Bonjour, $sections est déjà un tableau suite à l'application de explode. du coup vous passez un tableau de tableau

->whereIn('type', [$sections])

Juste la variable devrais donner un meilleur résultat

->whereIn('type', $sections)

Avatar de cbaconnier
cbaconnier

Bonjour,

Pour calculer la distance / distance sphérique dans une base de donnée il existe les champs de type spatiaux depuis MySQL 5.6+ il me semble.

Il y a la librairie grimzy/laravel-mysql-spatial pour Laravel qui exploite les fonctions native et donneront de bien meilleurs performances.

Vous ne pouvez pas répondre à ce sujet.