2011-02-04 22 views
0

私は少しの助けが必要です。 私は列を持つ(参照?)のテーブルを持っている:id , user_id , key , value複数選択のSql(zend db select)

それはかなりのユーザー・プロファイル・テーブル であると私はSQLを持っているしたいと思います(私はZendのdbテーブルを使用していますが、一般的なSQLのヘルプが行います)私が取得する場所"all 'user_idは' key 'がsomekeyで、' value 'はそのuser_idの値ですが、' key 'がotherkeyで、' value 'がothervalueである場合にのみ一致します。

つまり、ナイキメーカーの靴とカラーブラックのユーザーを獲得したいと考えています。 したがって、 'key'はshoecolorで、 'value'はBLACKで、同じuser_idを持つ別の行には 'key'がシューメーカーで、 'value'はNIKEです。

これは私が思いついたものですが、うまくいかないものです。

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

場合誰かがZendのDBで知識豊富である:

$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); 

助けてください。 Thanx。

答えて

1

キー/値のペアが行にあるので、あなたのクエリが値を同時に3および4になることはできません3と4でキーを探しています;)

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

はしません作業。

あなた自身で参加し、これらの値を確認できますか?

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

私はあなたがまだ登録しよuser_profiles UP2 ON up1.user_id = up2.user_id' – Vika

+0

おっと、あなたは正しい '結合条件を追加する必要があります信じています。私はいつもそのようなものを忘れていますが、一般的な考えは正しいかもしれません:)私はそれを追加します、ありがとう:) – Nanne

+0

ありがとう – DavidHavl