0

少し助けが必要です。私は(参照?)列を持つテーブルを持っています:id , user_id , key , value

これはほとんどユーザー プロファイル テーブルであり、SQL を使用したいと考えています (私は zend db テーブルを使用していますが、一般的な SQL ヘルプで十分です)。その user_id は、'key' が otherkey で 'value' が othervalue である場所にも一致する場合に限ります。

つまり、メーカーがNIKEで色がBLACKの靴を持っているユーザーを獲得したい。したがって、'key' は靴の色で、'value' は BLACK であり、同じ user_id を持つ別の行では、'key' が shoemaker で、'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);

助けてください。ありがとう。

4

1 に答える 1

1

キーと値のペアが行にあるため、クエリは 3 AND 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)
于 2011-02-04T21:26:57.687 に答える