2011-02-04 78 views
0

我需要一點幫助。 我有(參考?)表列:id , user_id , key , value多選的Sql(zend db select)

這是一個很值得用戶資料表 ,我想有SQL(我使用Zend db表,但是一般的SQL幫助都行)從哪裏獲得「all」user_id其中'key'是somekey,'value'是user_id的某個值,但只有當'key'是其他鍵並且'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的分貝見地:

$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。

回答

1

因爲鍵/值對是行中,查詢正在尋找的關鍵是3和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) 
+1

我相信你還是需要添加一個連接條件`JOIN user_profiles UP2 ON up1.user_id = up2.user_id` – Vika 2011-02-04 22:10:09