繁体   English   中英

MYSQL在多个列中选择DISTINCT值

[英]MYSQL select DISTINCT values in multiple columns

我有一张桌子:

$taxonomy_table (
                `id` int(11) NOT NULL AUTO_INCREMENT,
                `type` varchar(10) NOT NULL,
                `title` varchar(255) NOT NULL,
                `media_id` int(11) NOT NULL,
                `playlist_id` int(11) NOT NULL,
                PRIMARY KEY (`id`),
                INDEX `media_id` (`media_id`),
                CONSTRAINT `mqap_taxonomy_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES {$media_table} (`id`) ON DELETE CASCADE ON UPDATE CASCADE
            )";


media_id     type      title
------------------------------
23           tag       fashion
23           tag       beauty
23           category  foo
24           tag       fashion
24           category  foo

我想选择带有所有这些标签=“ fashion,beauty”和category =“ foo”的商品,所以只有media_id = 23。

查询是:

$query = "SELECT media_id
                FROM {$taxonomy_table}
                WHERE type='tag' AND title IN ($arg) 
                AND type='category' AND title IN ($arg2)
                AND playlist_id=%d
                GROUP BY media_id
                HAVING count(DISTINCT title) = $total";

$ arg =“时尚,美丽”,$ arg2 =“ foo”

"SELECT media_id 
 FROM wp_mvp_taxonomy 
 WHERE type='tag' 
   AND title IN (%s,%s) 
   AND type='category' 
   AND title IN (%s) 
 GROUP BY media_id 
 HAVING count(DISTINCT title) = 3" 

但这没有任何回报。

您可能想要OR

"SELECT media_id 
 FROM wp_mvp_taxonomy 
 WHERE (type='tag' AND title IN (%s,%s))
   OR  (type='category'  AND title IN (%s))  -- here
 GROUP BY media_id 
 HAVING count(DISTINCT title) = 3" 

原版的:

WHERE type = 'tag' ... AND type ='category' => always false

您需要OR ,也要加上括号,因为AND具有优先权。

$query = "SELECT media_id
          FROM {$taxonomy_table}
          WHERE playlist_id=%d 
            AND (   ( type='tag' AND title IN ($arg) )
                 OR ( type='category' AND title IN ($arg2) )
                )
          GROUP BY media_id
          HAVING count(DISTINCT title) = $total";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM