我有一個MySQL的結果(通過連接三個表獲得),看起來像這樣:消除MySQL的結果不需要行
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
(搜索過程%漁夫%)
我通過搜索獲得此%像%結果並比較兩個表 - 文章表和標記表(使用關係表tagsrel)。
我想消除相同article_id的多餘行(請參見第一列)。 我期待與
SELECT FROM (SELECT FROM /*original query */)
有可能是一個DISTINCT
這樣做呢?儘管這些行不是唯一的,正如你所看到的。理想情況下,我想只選擇具有該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
00025 | Green Guernsey | 14 | fisherman | 00025 | 14
我的問題還真是可以本人申請(如上)另一個選擇將此消除說行? 預先感謝(我一直停留在這幾天了!!!)
解決方案:按照以下胡安·卡洛斯·Oropeza的回答,與別名添加插入查詢
SELECT *
FROM (SELECT *,
@rn := if(@article = `article_id`,
@rn + 1,
if(@article := `article_id`, 1, 1)
) as rn
FROM (/*query*/) AS bob
CROSS JOIN (SELECT @rn := 0, @article := '') as T
ORDER BY `article_id`, tag_id
) T
WHERE rn = 1
ORDER BY `article_id`
爲什麼你選擇TAG_ID 13漁人編織? –
因此,連接會導致這些結果出現不同的tag_ID,tag和tag_rel ....如果您不需要這些字段...爲什麼將它們包括在連接中或選擇?或者你可以使用group_concat()來合併這些記錄的所有值......或者更好......也許你需要兩個單獨的查詢。一個只是文章,另一個是細節? – xQbert
哦,搜索是%fisherman%,我應該說的! – gavin