php - MySQL 不同内连接

标签 php mysql

请原谅我对此缺乏了解。我对 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/

相关文章:

php - 在 php 中对结果进行分页的最佳方法是什么

php - 是否可以将滚动条捆绑在一起?

php - 使用 latin1_general_ci 将 Unicode 数据插入数据库的最佳方法

php oop数据库查询

php - 如何使来自另一个域的用户能够从我的域中搜索记录?

php - wpdb::prepare() 的查询参数必须有一个占位符

mysql - #1064 - 您的 SQL 语法有错误

mysql - 根据行数将数据从行连接到 1 行

mysql - PHPMyAdmin Mysql 在 <attribute> 上创建外键时出错(检查数据类型)

mysql - 使用带条件的行进行左连接