请原谅我对此缺乏了解。我对 PHP 和 MySQL 查询的经验有限。我可以做一些基本的查询,但是,这是我需要修改的一个,这让我很困惑。
我有一个查询,该查询提取已分配奖项的产品的所有数据。然而,如果一种产品获得多项奖项,则表明该产品多次获奖。理想情况下,我希望该产品展示一次。
我希望对查询应用 DISTINCT 或 UNIQUE 值,但从构造查询的方式来看,它似乎没有执行任何操作。
原始查询如下:
<?php
$get_awards = $wpdb->get_results("
SELECT *
FROM wp_posts
WHERE post_type = 'award'
AND post_status = 'publish'
AND YEAR(CAST(post_date AS DATE))=2009
GROUP
BY post_title
ORDER
BY post_date DESC
");
foreach ($get_awards as $award) {
$get_products = $wpdb->get_results("SELECT * FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id WHERE post_type = 'ice-cream' AND post_status = 'publish' AND meta_key = 'awards' AND meta_value LIKE '%''".$award->ID."''%' OR post_type = 'frozen-yoghurt' AND post_status = 'publish' AND meta_key = 'awards' AND meta_value LIKE '%''".$award->ID."''%' OR post_type = 'sorbet' AND post_status = 'publish' AND meta_key = 'awards' AND meta_value LIKE '%''".$award->ID."''%'");
foreach ($get_products as $product) { ?>
我尝试过将 SELECT * 更改为 SELECT DISTINCT 等的几个版本,但没有任何乐趣。有人可以给我一些指点吗?
最佳答案
如果您*选择了所有列,那么不同的列就没用了
如果您需要不同的结果,您应该仅显式选择您想要不同值的列
Group by is for aggreagtion function and is not necessary for distinct clause
所以,假设您需要的列是 col1、col2 和 col3,您应该使用像
这样的选择 SELECT DISTINCT col1, col2, col2
FROM wp_posts
WHERE post_type = 'award'
AND post_status = 'publish'
AND YEAR(CAST(post_date AS DATE))=2009
GROUP BY post_title
ORDER BY post_date DESC
关于php - MySQL 不同内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41665502/