2009-01-10 11 views
1

J'ai un champ numérique appelé category_id dans ma table. Je veux faire quelque chose comme ça.Meilleure syntaxe de requête pour les tables imbriquées?

$ids=implode(',',$id_array); 
$sql="SELECT * FROM myTbl WHERE IN(category_id,'$ids')"; 

qui devrait afficher quelque chose comme:

SELECT * FROM myTbl WHERE IN(category_id,'1,2,3,4,5,6'); 

Est-ce possible et que j'utilise la bonne syntaxe pour cela? Y a-t-il une meilleure manière de faire cela?

Répondre

2

D'où obtenez-vous le tableau d'id? Si c'est de la base de données, vous devriez envisager de le faire tout ce qu'il ya:

SELECT * FROM myTbl WHERE c_id IN (SELECT c_id FROM yourTable WHERE ...); 
+0

Merci, rend les choses un peu plus rapide –

3

Presque, mais pas tout à fait - ici est une façon il pourrait travailler

$ids="'".implode("','",$id_array)."'"; 
$sql="SELECT * FROM myTbl WHERE category_id IN($ids)"; 

qui devrait afficher quelque chose comme:

SELECT * FROM myTbl WHERE category_id IN('1', '2', '3', '4', '5', '6'); 

Notez que puisque le champ est numérique, les guillemets sont inutiles mais C'est un idiome de code utile qui construit des listes de chaînes de caractères. Dans votre cas, vous pouvez simplifiez à

$ids=implode(',',$id_array); 

(je suppose le tableau ne soit pas vide, les éléments du tableau sont santized etc pour plus de clarté!)

+0

category_id est un champ numérique, sans les guillemets nécessaires dans le IN – ninesided

+0

ouais, manqué qu'il avait explicity a déclaré qu'il. Avoir modifié. –

1

Oui, la syntaxe pour MySQL est la suivante:

SELECT * FROM myTbl WHERE category_id IN(1,2,3,4,5,6); 

(parce que les valeurs sont ints, ils ne ont pas besoin entre guillemets Si elles étaient des chaînes, ils doivent chacun enfermer dans leurs propres citations -. category_id IN ('a', 'b')

Questions connexes