Mysql
如何為一條記錄顯示多個名稱但不重複記錄?
我有一個這樣的數據庫結構:
Car - id - carname - image - category - status Parts - partid - partname CarParts - carpartid - carid(fk) - partid(fk) - amountid(fk) Category - id - categoryname Amount - amountid - amountvalue
現在這就是我正在做的事情:
SELECT * FROM carparts INNER JOIN car on carparts.carpartid = car.id INNER JOIN parts on parts.partid = carparts.carpartid INNER JOIN amount on amount.amountid = carparts.amountid where status = 1
當 carparts 表中有多個 carpart 時,這將返回重複記錄。如何將 carparts.id 和 car.id 組合到一行,但該記錄仍有多個零件名?
所以必鬚髮生的是,每輛車可能有多個汽車零件,但是當查詢執行時,如果一條記錄有多個汽車零件,它會顯示具有不同零件名稱的重複記錄,有沒有辦法讓一輛汽車具有許多零件名稱那個記錄?
我是否必須更改數據庫結構或查詢才能做到這一點?
你的結構看起來不錯。除了您可以將金額合併到零件表之外。因為每個部分都與價格嚴格相關。
此外,您將有重複行的唯一原因是您的任何維度表不遵循嚴格的主要約束。
Car - id (pk) - carname - image - category - status Parts - partid (pk) - partname - amountValue CarParts - carpartid (pk) - carid(fk) - partid(fk) - amountid(fk) Category - id (pk ) - categoryname
我認為這
*
僅用於展示目的。您可以使用 GROUP_CONCAT 將多行中的字元串聚合為一個字元串。在下面的範例中,我只包含汽車名稱,您可能需要更多資訊:
SELECT c.carname , GROUP_CONCAT(p.partname) FROM carparts as cp JOIN car as c ON cp.carid = c.id JOIN parts as p ON p.partid = cp.carpartid JOIN amount as a ON a.amountid = cp.amountid WHERE c.status = 1;