多选的Sql(zend db select)

时间:2011-02-04 21:22:43

标签: mysql zend-framework zend-db zend-db-select

我需要一些帮助。 我有(参考?)表格,其中包含列:id , user_id , key , value

它几乎是一个用户个人资料表 我想要SQL(我使用的是zend db table,但是一般的SQL帮助会这样做)我得到“all'user_id's其中'key'是somekey而'value'是user_id的某些值,但只有当它也匹配时其中'key'是otherkey,'value'是othervalue“。

换句话说,我希望得到制造商NIKE和颜色黑色鞋子的用户。 因此'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);

请帮助。 感谢名单。

1 个答案:

答案 0 :(得分: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)