Mysql 多次选择的Sql(zend db select)

Mysql 多次选择的Sql(zend db select),mysql,zend-framework,zend-db,zend-db-select,Mysql,Zend Framework,Zend Db,Zend Db Select,我需要一些帮助。 我有一个(参考?)表,表中有以下列:id、user\u id、key、value 它几乎是一个用户配置文件表 我希望使用SQL(我使用的是zend db table,但一般的SQL帮助就可以了),在这里我得到“所有的‘user_id’,其中‘key’是该user_id的某个key,而‘value’是该user_id的某个value,但前提是它也匹配其中的‘key’是otherkey,而‘value’是othervalue” 换言之,我希望获得拥有制造商NIKE和颜色为黑色的鞋的

我需要一些帮助。 我有一个(参考?)表,表中有以下列:
id、user\u id、key、value

它几乎是一个用户配置文件表 我希望使用SQL(我使用的是zend db table,但一般的SQL帮助就可以了),在这里我得到“所有的‘user_id’,其中‘key’是该user_id的某个key,而‘value’是该user_id的某个value,但前提是它也匹配其中的‘key’是otherkey,而‘value’是othervalue”

换言之,我希望获得拥有制造商NIKE和颜色为黑色的鞋的用户。 因此,“key”是shoecolor,“value”是黑色,“key”是shoemaker,“value”是NIKE,而另一行具有相同用户id的“key”是shoemaker

这是我能想到的,但不起作用

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.

因为键/值对在行中,所以您的查询正在查找一个3和4的键。任何值都不能同时为3和4;)

这是行不通的

你可以自己做一个连接,然后检查这些值

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)

我相信您仍然需要添加一个连接条件
在up1上连接用户\u profiles up2.user\u id=up2.user\u id
oops,您是对的。我总是忘记这类事情,尽管总的想法可能是正确的:)我要补充一点,谢谢:)
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)