我需要一些帮助。
我有(参考?)表格,其中包含列: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);
请帮助。 感谢名单。
答案 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)