我有一个MySQL结果(通过连接三个表获得),如下所示:
$project
(搜索为%fisherman%)
我通过搜索%like%results并比较两个表 - 文章表和标签表(带有关系表tagsrel)来获得这个。
我想删除相同article_id的无关行(请参阅第一列)。 我正在考虑用
做这件事 article_id | article_name | tag_id | tag | article_ref | tag_ref
-----------------------------------------------------------------------------------
00021 | Red jumper | 14 | fisherman | 00021 | 14
00023 | Fishermans knit| 13 | batwing | 00023 | 13
00023 | Fishermans knit| 14 | fisherman | 00023 | 14
00023 | Fishermans knit| 15 | rollneck | 00023 | 15
00025 | Green Guernsey | 14 | fisherman | 00025 | 14
可能是SELECT FROM
(SELECT FROM /*original query */)
?虽然行不是唯一的,但正如您所看到的那样。理想情况下,我想只选择带有该ID的第一个。所以我的结果将是:
DISTINCT
我的问题实际上是否可以应用(如上所述)另一个SELECT来消除所述行? 在此先感谢(我已经被困在这几天了!!!)
解决方案:根据Juan Carlos Oropeza的回答,添加别名以插入查询
article_id | article_name | tag_id | tag | article_ref | tag_ref
-----------------------------------------------------------------------------------
00021 | Red jumper | 14 | fisherman | 00021 | 14
00023 | Fishermans knit| 13 | batwing | 00023 | 13
00025 | Green Guernsey | 14 | fisherman | 00025 | 14
答案 0 :(得分:1)
使用变量选择每个user.roles[0].id
<强> SQL DEMO 强>
article_id
<强>输出强>
ADITIONAL TIP:
SELECT *
FROM ( SELECT *,
@rn := if(@article = `article_id`,
@rn + 1,
if(@article := `article_id`, 1, 1)
) as rn
FROM yourTable
CROSS JOIN (SELECT @rn := 0, @article := '' ) as T
ORDER BY `article_id`, tag_id
) T
WHERE rn = 1
ORDER BY `article_id`