2010-10-15 4 views
3

J'essaie de filtrer une table pour sélectionner les valeurs de certaines lignes en fonction des conditions. Le premier SELECT plutôt complexe fonctionne très bien en me donnant un groupe d'id. Mais je veux utiliser ce groupe d'id ($ art_id) dans un tableau pour le 2e SELECT pour obtenir des lignes plus directement. J'espère que quelqu'un a des suggestions. Merci, Allen.SELECT avec array()

le premier SELECT n'est pas inclus ici - j'obtiens des valeurs avec print $ art_id; ... mais seulement la dernière valeur apparaît dans ma liste d'images SELECT parce que je dois utiliser un tableau correctement

$QUERY1="SELECT.....etc,..." ///this works fine 

$res = mysql_query($QUERY1); 
    $num = mysql_num_rows($res); 
    if($num>0){ 
    while($row = mysql_fetch_array($res)){ 
     $art_id = $row['art_id']; 

print $art_id; 
$a1 = array($art_id); ///this $a1 var didn't work in the SELECT below. 
    } 
} 
///here is where I need to have an array var instead of just $art_id 
$QUERY2="SELECT * FROM artWork WHERE art_id = '$art_id'"; 

    $res = mysql_query($QUERY2); 
    $num = mysql_num_rows($res); 
    if($num>0){ 

    while($row = mysql_fetch_array($res)){ 
     $art_title = $row['art_title']; 
     $artist_name = $row['artist_name']; 
     $art_id = $row['art_id']; 
       $media = $row['media']; 

    echo.....etc,...../// only one image (the last, of course) shows up here 
+0

Cela ressemble à une simple clause 'IN()' devrait faire l'affaire dans une requête? – Wrikken

+0

Juste une petite note. 'IN' est un opérateur. Ne pas être confondu avec une clause ou une fonction. –

+0

En règle d'or, inclure autant d'informations que vous pouvez (je fais référence à la première requête) – Cesar

Répondre

0

Il suffit d'utiliser cela pour le faire dans une requête.

SELECT [...] WHERE `art_id` IN (SELECT `art_id` [...]) 

Bien que ce soit redondant si vous sélectionnez dans la même table dans les deux requêtes.

Si vous voulez tester les valeurs à partir d'un tableau PHP, vous devez utiliser IN comme ceci:

$values = array(1,2,3); 
'WHERE `art_id` IN ('.implode(',', $values).')' 
+0

Merci, Alin. J'ai bien travaillé. Avec 70 vars comparés dans différents groupes (par exemple, peintures pas les mêmes médias que la sculpture ou des photos), il était difficile à comprendre. Mais vous m'a indiqué dans la bonne direction avec une requête dans la requête. -tous apprécié, Allen – artworthy

+0

Pas de problème. Notez également que sur stackoverflow, il est habituel d'accepter les réponses qui, selon vous, répondent le mieux à vos questions. –

3

vous pouvez résoudre ce problème en utilisant simplement requête si vous le souhaitez:

disons que vous première requête obtenir le art_id de la table table1 donc:

SELECT art_id FROM table1 

et vous la prochaine requête, il est:

SELECT * FROM artWork WHERE art_id = '$art_id' 

La requête finale obtenue en fusionnant les 2 autres requêtes:

SELECT * FROM artWork WHERE art_id in (SELECT art_id FROM table1); 
0

Utilisez une jointure, il est assez simple et beaucoup plus rapide.

SELECT aw.* FROM table1 t 
JOIN artWork aw ON aw.art_id=t.art_id 
WHERE (CONDITIONS); 

où CONDITIONS correspond aux conditions de votre première requête.