2010-11-20 10 views
2

j'ai les débuts d'une requête:MySQL plusieurs tables sélectionner avec WHERE pas comparer 2 tables

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE tf_threads.thread_id=54

Bien sûr, il est juste le début d'un - je me déplace un pas à la fois pour ça va aller beaucoup mieux au fil du temps. Ce que je suis coincé en ce moment, cependant, est de savoir comment obtenir une clause WHERE pour comparer une colonne dans une table avec une variable PHP, pas une autre colonne.

Le PHP J'est la suivante:

SELECT $tf_threads.*, $tf_posts.* FROM $tf_threads, $tf_posts WHERE $tf_threads.thread_id=$tf_this_forum

Le bit est importante ici $tf_threads.thread_id=$tf_this_forum. Quand j'essaye cela, il ne renvoie simplement aucune ligne, avec MySQL disant: Impossible WHERE noticed after reading const tables. Cela devrait sûrement fonctionner correctement? Évidemment, ce n'est pas le cas, alors quelqu'un peut-il nous aider s'il vous plaît?

Merci beaucoup,

James

EDIT: J'ai aussi essayé de faire la requête dans MySQL pur comme ceci:

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE tf_threads.thread_id=54

deux avec des citations autour de la 54 et sans, avec le même résultat sans lignes.

Répondre

1

Votre requête exécute implicitement un CROSS JOIN et il semble contenir trop de signes $.

Je vous suggère les modifications supplémentaires suivantes:

  • Utilisez ANSI-92 rejoint (le mot-clé JOIN) au lieu de la norme ANSI-89 rejoint (la virgule).
  • Utilisez intval appliqué à $ tf_this_forum pour vérifier qu'il s'agit d'un nombre entier.
  • Envisagez d'utiliser des paramètres de liaison au lieu de construire dynamiquement la requête à partir de chaînes. N'utilisez $ que lorsque vous faites référence à une variable PHP.

En ce qui concerne l'erreur Impossible WHERE remarqué après avoir lu les tables const cela signifie qu'aucune ligne ne correspond. Vérifiez que la ligne que vous recherchez existe réellement dans votre base de données. Il se pourrait que ce ne soit pas le cas.

+0

Merci! Votre puce «JOIN» a bien fonctionné; faire cette requête fonctionne parfaitement: 'SELECT tf_threads. *, tf_posts. * FROM tf_threads LEFT JOIN tf_posts ON tf_threads.thread_id = 54' – Bojangles

1
SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE 
tf_threads.thread_id='$tf_this_forum' 

Note: Vous devez mysql_real_escape_string$tf_this_forum si elle n'a pas encore été échappé.

+0

Merci pour l'entrée, mais 'thread_id' est un champ numérique de toute façon - j'aurais dû l'inclure dans mon OP pour éviter toute confusion. S'il vous plaît voir @Mark Byer's post pour la solution :-) – Bojangles

+0

Aussi, +1 pour le bon conseil aux autres utilisateurs - vous ne pouvez pas toujours garantir une variable sera numérique! – Bojangles

Questions connexes