php - 由于 JOIN 相同的 ID,按组删除重复结果

标签 php mysql join group-by

我的 MySQL 查询不断创建重复条目。我认为这与我的加入或 ID 值有关。 我是 JOIN 的新手,我正在尝试做一个相当简单的 JOIN 和过滤器。

基本上我是在产品列表页面上过滤产品。

newCatCols

+----+-----------------+-------------+
| id | sku             | name        |
+----+-----------------+-------------+  
|  1 | 670_apple       | Black       |
|  2 | 670_apple       | Apple       |
|  3 | 670_apple       | Blush       |
|  4 | 670_apple       | Turquoise   |
|  5 | 670_apple       | Light Coral |
| 10 | 640_apple_black | Apple_Black |
| 22 | 347_blush       | Lime        |
| 33 | 347_blush       | Turquoise   |
| 44 | 347_blush       | Gray        |
| 55 | 347_blush       | Yellow      |
+----+-----------------+-------------+

newCatProds

+----+-----------------+--------+------+
| id | sku             | cost   | cat  |
+----+-----------------+--------+------+    
|  1 | 670_apple       | 489.55 | swar |
| 10 | 640_apple_black | 458.99 | swar |
| 22 | 347_blush       | 741.44 | sig  |
+----+-----------------+--------+------+    

如果自定义选择黑色,我希望它返回黑色、Apple_Black 和 Apple 的颜色。它只是重复列表:

// productslisting.php?cat=swar&filter=Black
$strColourGet=mysql_real_escape_string($_GET["filter"]);
$strCatGet=mysql_real_escape_string($_GET["cat"]);  

if($strColourGet=="Black"){

$checkSQL=mysql_query("
SELECT * FROM `newCatProds`
INNER JOIN `newCatCols`
ON `newCatProds`.`sku` = `newCatCols`.`sku`
WHERE (
    `name` = 'Black' OR
    `name` = 'Apple' OR
    `name` = 'Apple_Black' 
)
AND `status`='1' AND `category` = '".$strCatGet."'
ORDER BY `newCatProds`.`rank` DESC");

}

虽然结果出现了两次。我能不能让它出现两次?

710     702_appleblack  139         sig     0   8   1   1   1243    702_appleblack  Apple_Black
486     613_turq    139         sig     0   124     1   1   695     613_turq    Black
463     379_sapphire2   139         sig     0   46  1   1   652     379_sapphire2   Black
504     670_apple   119         sig     0   176     1   1   607     670_apple   Black
463     379_sapphire2   139         sig     0   46  1   1   658     379_sapphire2   Apple_Black

也许是一个团体?所以 379_sapphire2 应该只出现一次,因为它同时出现了?

最佳答案

这些都是不同的结果。仔细观察它们。

如果您想避免这种情况,请执行特定字段请求,而不是 SELECT * FROM

要只获得一个答案,您需要在 select 中将该字段指定为不同的,并创建一个 group_by 子句。您不能在选择参数中使用 * 创建组。

PS:我建议您像这样重写您的查询。这样更容易理解:

SELECT
    DISTINCT( category )
FROM
    newCatProds p
JOIN
    newCatCols c
ON
    p.sku = c.sku
WHERE
    c.name IN ( 'Black', 'Apple', 'Apple_Black' )
    AND status =  1
    AND category = '" . $strCatGet . "'
GROUP BY
    category
ORDER BY
    p.rank DESC;

关于php - 由于 JOIN 相同的 ID,按组删除重复结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12931082/

相关文章:

php - 显示消息状态: read and unread (differs from other users) in PHP/MySQL messaging system

php - 更新另一个表上的特定表字段

php - 当我连接两个表时,不返回空值。返回以前的数据

mysql - 两个外连接上的别名

mysql - 如何从另一张 table 获取 ID 号?

Php 插入后错误访问被拒绝用户 'root' @'localhost'(使用密码 : YES)

javascript - 跟踪 <iframe> 内的用户点击(Wiki 游戏)

php - 使用 mysql 连接查询努力获取月份名称

php - 查询时逻辑要求、结构困惑

php 编码字符串,反之亦然