2011-02-04 6 views
0

J'ai besoin d'un peu d'aide. je (référence?) Table avec colonnes: id , user_id , key , valueSql (zend db select) des sélections multiples

Il est à peu près une table de profil d'utilisateur et je voudrais avoir SQL (j'utilise table zend db, mais l'aide de SQL général va faire) où je reçois "all" user_id où 'key' est somekey et 'value' est une valeur de cet user_id mais seulement s'il correspond aussi où 'key' est otherkey et 'value' vaut othervalue ". En d'autres termes, je veux obtenir des utilisateurs qui ont des chaussures du fabricant NIKE et de la couleur NOIR. donc 'key' est shoecolor et 'value' est BLACK et aussi une autre ligne avec le même user_id a 'key' est cordonnier et 'value' est NIKE.

Voici ce que j'ai pu trouver, mais cela ne fonctionne pas.

SELECT `user_profiles`.* FROM `user_profiles` WHERE 
(`key` = 'shoecolor' AND `value` = 'BLACK') AND 
(`key` = 'shoemaker' AND `value` = 'NIKE') 

Dans le cas où une personne est en zend db knowledgable:

$where = array('shoecolor' => 'BLACK', 'shoemaker' => 'NIKE'); 
    foreach ($where as $key => $value) { 
     $sql = $db->quoteInto('key = ?', $key); 
     $sql .= ' AND ' . $db->quoteInto('value = ?', $value); 
     $select->where($sql); 
    } 
    // make unique result 
    //$select->groupBy('user_id'); 
    $resultSet = $zendTableInstance->fetchAll($select); 

S'il vous plaît aider. Merci.

Répondre

1

Parce que la paire clé/valeur est dans la ligne, votre requête est à la recherche d'une clé qui est 3 et 4. Aucune valeur ne peut être 3 et 4 en même temps;)

SELECT user_profiles.* FROM user_profiles WHERE (key = 3 AND value = 21) AND (key = 4 AND value = 55) 

ne travail.

Vous pourriez faire une jointure sur vous-même et vérifier ces valeurs?

SELECT user_profiles.* 
FROM user_profiles up1 
    JOIN user_profiles up2 ON up1.user_id = up2.user_id 
WHERE 
    (up1.key = 3 AND up1.value = 21) 
    AND (up2.key = 4 AND up2.value = 55) 
+1

Je crois que vous avez encore besoin d'ajouter une condition de jointure 'REJOIGNEZ user_profiles UP2 ON up1.user_id = up2.user_id' – Vika

+0

oups, vous avez raison. J'oublie toujours ce genre de choses, bien que l'idée générale puisse être correcte :) Je vais ajouter ça, merci :) – Nanne

+0

Merci beaucoup – DavidHavl