【问题标题】:Sql (zend db select) of multiple selectssql(zend db select)的多选
【发布时间】:2011-02-04 21:22:42
【问题描述】:

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

这几乎是一个用户个人资料表 我想要有 SQL(我正在使用 zend db 表,但一般的 SQL 帮助会做),我得到“所有 'user_id's where 'key' is somekey and 'value' is somevalue of that user_id but only if it also match其中'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);

请帮忙。 谢谢。

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

    • 相信你还是需要加个join条件JOIN user_profiles up2 ON up1.user_id = up2.user_id
    • 哎呀,你是对的。我总是忘记那种东西,虽然一般的想法可能是正确的:)我会补充一下,谢谢:)
    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多