-1
votes

Comment rechercher la base de données MySQL à l'aide d'un tableau via PHP / Ajax?

J'ai trouvé quelques questions similaires posées mais aucune d'entre elles ne semble être proche de ce que j'essaie de faire.

question: strong> p>

J'ai un PHP Code qui recherche la base de données MySQL et renvoie les données en fonction de l'emplacement des utilisateurs (Lat / Long). Et il imprime les données comme JSON. (cela fonctionne bien et comme il le devrait). p>

Le code ressemble à ceci: p> xxx pré>

maintenant, j'ai besoin d'ajouter un autre paramètre de recherche à la au-dessus de la requête. Ce paramètre est un tableau créé par des cases à cocher cochées et on ressemble à ceci: p> xxx pré>

donc, j'envoie ce paramètre supplémentaire à ma page PHP comme tous les autres paramètres via Ajax et Je reçois la matrice dans mon php comme: p> xxx pré>

mais je ne sais pas comment je peux ajouter ce paramètre supplémentaire à ma requête actuelle afin que mon PHP renvoie des données basées sur la Valeur dans ce tableau. P>

J'ai essayé quelque chose comme ça qui ne fonctionne pas: p> xxx pré>

ceci où les catégories = '$ filtres' est faux. p>

Quelqu'un pourrait-il faire une question de conseil sur cette question? P>

EDIT: STRY> P>

Je l'ai essayé tous les sens en vain. J'ai même essayé comme ça et je n'ai toujours pas reçu de résultats de la base de données: P>

   $sql ="SELECT b.*
   FROM businesses b 
  ORDER
     BY -- great circle distance calculation
        ( 3959 * ACOS( COS( RADIANS('" . $latitude2. "') )
                     * COS( RADIANS( b.lat ) )
                     * COS( RADIANS( b.lon ) 
                            - RADIANS('" . $longitude2 . "') 
                          )
                     + SIN( RADIANS('" . $latitude2 . "') )
                     * SIN( RADIANS( b.lat ) ) 
                 ) 
        ) ASC WHERE FIND_IN_SET(b.categories, 'Toys, Restaurants, Hotel') LIMIT 4";


3 commentaires

Votre colonne Catégories MySQL contient-elle une valeur unique ou plusieurs valeurs?


@Nadirlatif, valeurs simples. Exemple: l'un a des restaurants et l'un a un hôtel et ainsi de suite.


@Dharman, ce n'est pas mon code. C'est un code que je travaille écrit par quelqu'un d'autre. pourrait passer à PS à l'avenir.


3 Réponses :


1
votes

Il pourrait être bon de simplement exécuter une telle requête pour voir ce qui se passe - probablement, vous auriez reçu un message d'erreur vous indiquant que le où la clause devrait se produire avant la commande par


5 commentaires

Mais le problème est que je ne fais rien avec le tableau que je reçois dans mon PHP. Je ne pense pas que toute la requête a raison car PHP ne peut pas rechercher la base de données MySQL comme ceci: où catégories = '[{"Titre": "Toys"}, {"Titre": "Restaurants"}, {" E ":" hotel "}, {" Titre ":" Animaux "}, {" Titre ":" Un ccounting "}] '


Je ne sais pas ce que vous entendez par là, mais la fixation de votre requête pourrait être un bon début. Et si vous pensez que l'insertion de la chaîne soit directement fausse, ce qui vous empêche de le changer de telle sorte qu'il ne soit plus faux? Je n'ai aucune idée de votre structure de base de données


Ce que je voulais dire, c'est que le problème n'est pas en positionnant la clause où vous l'avez suggéré.


Mais vous avez raison ... c'est l'un des problèmes. toujours rien de retour!


Maintenant, tout fonctionne. Un mélange de votre suggestion et @nadir Latif, j'ai réussi à le faire fonctionner.



-1
votes

où dans est ce dont vous avez besoin où id in ('". $ tury."') "");

Essayons


2 commentaires

Pouvez-vous expliquer cela plus loin? $ Array ne se produit pas dans le code partagé par James


Bien utiliser est une bonne option. Mais il doit être `Où les catégories dans ('Catégorie1, Catégorie2, Catégorie3'), car nous vérifions les catégories et non ID. Voir: W3RESource.com/mysql/comparision-fonctions- et-opérateurs / ... . Aussi les arguments nécessaires à la liste des catégories de format à la chaîne



2
votes

La variable de filtres contient une chaîne JSON. Vous devez le convertir en array PHP à l'aide de JSON_Decode . < P> Après cela, obtenez les valeurs de chaque titre. Suivant Utilisez la fonction MySQL Find_in_set . Par exemple: xxx


2 commentaires

Puis-je faire $ filters = json_decode ($ _ obtenir ["Filtres ']); , puis où recherche_in_set (catégories, $ filtres') ?


Eh bien utiliser json_decode ($ _ obtenir ["filtres '], vrai). Il retournera un tableau. Ce tableau contient des tableaux dans le format "Titre" => "Quelque titre". Vous devez donc utiliser une boucle pour obtenir la valeur du titre. Mettre chaque titre dans un tableau. Suivant Convertir ce tableau en chaîne en utilisant $ string = implorez ("", $ tury). Vous pouvez utiliser cette chaîne dans la requête SQL. Par exemple: où Find_in_set (catégories, $ String)