Toute idée aiderait, j'ai été là-dessus depuis un moment et je ne peux tout simplement pas comprendre ce qui ne va pas.
problème: la requête fonctionne bien jusqu'à ce que j'ai ajouté dans la recherche de mots multiples que vous pouvez voir en gras ci-dessous. . Cependant, j'ai fait écho à la requête SQL puis collée à PHPMyAdmin et cela fonctionnait parfaitement, mais à travers le PHP, il en résulte avec 0 enregistrements. Cela n'a aucun sens et je ne peux pas comprendre ce qui pourrait causer un résultat de 0. p>
6 Réponses :
Essayez ceci:
SELECT
DISTINCT c.id
FROM
carpets AS c
INNER JOIN carpet_relations AS r1 ON c.id = r1.carpet_id
INNER JOIN carpet_relations AS r2 ON c.id = r2.carpet_id
INNER JOIN carpet_relations AS r3 ON c.id = r3.carpet_id
WHERE
c.active = '1'
AND ((c.title LIKE '%north%')
OR (c.title LIKE '%tabriz%')
OR (c.item_no LIKE '%north%')
OR (c.item_no LIKE '%tabriz%')
OR (c.pattern LIKE '%north%')
OR (c.pattern LIKE '%tabriz%')
OR (c.period LIKE '%north%')
OR (c.period LIKE '%tabriz%')
OR (c.country LIKE '%north%')
OR (c.country LIKE '%tabriz%'))
AND (c.width_feet BETWEEN 0 AND 22)
AND (c.width_inches BETWEEN 0 AND 11)
AND (c.height_feet BETWEEN 0 AND 49)
AND (c.height_inches BETWEEN 0 AND 11)
ORDER BY
c.item_no
Ce n'est probablement pas la requête, mais une erreur dans votre code PHP quelque part. Pouvez-vous vous poster votre code PHP pour nous pour regarder? P>
Payez une attention particulière sur la manière dont vous utilisez des devis en PHP également. Pour les requêtes SQL avec une clause Where Spécifiquement, cela peut être un problème depuis la clause où la clause doit indiquer où x = "valeur" en guillemets simples. Par conséquent, assurez-vous que votre chaîne SQL globale utilise des guillemets doubles. De plus, les variables PHP dans des guillemets simples ne seront pas évaluées, de sorte que si vous basez sur une clause de la variable PHP, vous devez envelopper cette variable dans des guillemets simples avant de l'utiliser dans l'instruction SQL. J'espère que tout cela a eu du sens, je suis resté coincé sur cette question pendant 2 jours lorsque j'ai commencé à apprendre PHP / MySQL. P>
Essayez d'abord des requêtes simples (pour tester la connexion) S'ils ne fonctionnent pas, consultez l'hôte de la base de données, le nom d'utilisateur, le mot de passe (ils pourraient être entrés à tort) P>
Une fois que vous êtes sûr de la connexion DB, essayez d'utiliser la fonction multi-requêtes en PHP, supprimez l'espacement inutile, exécutez la requête dans A pour boucle ou plusieurs étapes P>
J'espère que cela aide p>
Parfois, je reçois ce problème, cela ne se produit que lorsqu'il y a un problème de connexions ou de votre requête. Veuillez imprimer votre requête et voir comment elle imprime. Dans la requête, vous devez utiliser $ var code>. P>
Essayez de gérer ("") correctement dans votre code PHP. Si votre requête fonctionne correctement dans PhpMyAdmin, il doit également fonctionner avec votre code PHP. Ou il pourrait y avoir une erreur dans votre connexion de base de données. Assurez-vous de sélectionner une base de données correcte de votre table souhaitée. P>
Une autre déclaration plus facile fonctionne-t-elle dans votre contexte? (Comme Select * des tapis)
Il serait utile de voir vos schémas de table et l'erreur de MySQL.
Oui, ils font aussi bien que si les zones entourées ** sont supprimées, il fonctionne simplement bien sur le front-end ... Cependant, lorsque j'ajoute ces sections à l'avant, cela ne fonctionne pas et du back (phpmyadmin) il fait
Si la même requête renvoie différents résultats de différents contextes, mon premier chèque serait si je l'exécute vraiment contre la même base de données?
Je sais que dans PHP, vous ne pouvez pas avoir plusieurs questions à MySQL séparées par; Donc, je me demande si cela pourrait être le même pour ** récupérera ici si je trouve quelque chose de plus clair
Êtes-vous sûr que c.item_no est un champ de texte? Cela ressemble plus à un numéro où vous ne pouvez pas utiliser comme '% texte%'
c'est la chose qu'il n'y a pas d'erreur renvoyée
Avez-vous essayé le match ... contre votre requête à la place?
juste pour clarifier ** a été ajouté à la requête juste pour montrer ce qui a été ajouté
Ce pourrait être une idée stupide, mais vous pouvez vérifier si vous avez un caractère spatial à la fin de chaque ligne.
À Djot, je l'ai résolu pour vérifier les valeurs de numéro toujours pas de changement
Si je mets en un seul mot, cela fonctionne, mais c'est lorsque je fais plusieurs mots, cela ne vérifie pas la vérification supplémentaire de séparer la recherche par espaces et d'ajouter une autre clause similaire pour accueillir chaque mot
Si quelqu'un aimerait le voir avec le SQL sortidé, vous pouvez aller à: 50.28.19.26/search.php et tapez la barre de recherche supérieure Le mot «nord» et il apportera les résultats correctement lorsque vous tapez «North Tabriz», il devrait apparaître tout ce qui a le nord et tout ce qui a Tabriz
Vous pouvez obtenir une meilleure aide si vous nous montrerez la structure de
Tapis code> Table (ExécuterDécrivez des tapis code> et ajoutez la sortie ici) et écrivez ceC.Title comme '% North Tabriz%' code> commeC.Title comme '% North% Tabriz%' code> pas aussi (C.Title comme "% nord%") ou (C.Title comme '%% Tabriz% ')ID INT (11) Non PRI NULL Auto_Increment actif Int (11) Aucun titre Null Varcharchar (250) Non Null Item_no Varchar (250) Non Null Cays Varcharchar (250) Pas de Null Période Varcharchar (250) Pas de motif Null Varcharchar (250) Non NULL PRIX PLOAT NON NULL WEB_SPECIAL FLOAT NOVEL NOTES NOVEL NOTES NO NULL WIDTH_FEET INT (11) NO NULL WIDTH_INCHES INT (11) NO NULL HAUTE_FEETE INT (11) NO NULL HAUT_INCHES INT (11) NO NULL LIMITE INT (11) NO NULL VISIONS_AmT INT (11) No Null Last_Modified DateTetime No Null Modified_By int (11) No Null
là tu vas je l'ai ajouté ci-dessus
La seule chose qui vous aiderait vraiment à vous aider à prendre de petites étapes et à essayer votre requête dans votre code en premier uniquement avec
C.active = '1' et c.Titer comme '% North% Tabriz%' code> code> , puis si tout va bien, vous l'exécutez avecc.active = '1' et (c.Title comme '% North% Tabriz%' ou C.Item_no comme '% North% Tabriz%') code > Et ainsi de suite ...Vous pouvez supprimer le
c.itter comme '% North Tabriz%' code>, car il est équivalent àc.title comme "% North%" code>, qui contrefaite.Cette requête est très chère. Vous devriez envisager de ré-normaliser vos données.
Pouvez-vous montrer votre code PHP? C'est ce qui semble être le problème ici.