0

我需要一点帮助。我有(参考?)带有列的表:id , user_id , key , value

它几乎是一个用户配置文件表,我想要 SQL(我正在使用 zend db 表,但一般的 SQL 帮助会做),我得到“所有 'user_id's where 'key' is somekey and 'value' is somevalue of该 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);

请帮忙。谢谢。

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 回答