假设我有一张这样的桌子......
啷
╔══════════╦════════════╦════════════╗
║ IDBARANG ║ NAMA ║ IDKATEGORI ║
╠══════════╬════════════╬════════════╣
║ 1 ║ Ban Becak ║ 1,3 ║
║ 2 ║ Velg Becak ║ 2,4 ║
╚══════════╩════════════╩════════════╝
驾驶员学校
╔════════════╦══════════════╗
║ IDKATEGORI ║ NAMAKATEGORI ║
╠════════════╬══════════════╣
║ 1 ║ Ban Dalam ║
║ 2 ║ Velg Canggih ║
║ 3 ║ Ban Keren ║
║ 4 ║ Velg Monster ║
╚════════════╩══════════════╝
我的问题是......如何获取,结果就像这样
╔══════════╦════════════╦═══════════════════════════╗
║ IDBARANG ║ NAMA ║ IDKATEGORI ║
╠══════════╬════════════╬═══════════════════════════╣
║ 1 ║ Ban Becak ║ Ban Keren,Ban Dalam ║
║ 2 ║ Velg Becak ║ Velg Monster,Velg Canggih ║
╚══════════╩════════════╩═══════════════════════════╝
我尝试使用FIND_IN_SET但什么都没有......
感谢您的帮助...
答案 0 :(得分:4)
使用FIND_IN_SET()
SELECT a.idBarang,
a.nama,
GROUP_CONCAT(b.namaKategori) idKategori
FROM barang a
INNER JOIN Kategori b
ON FIND_IN_SET(b.idKategori, a.idKategori)
GROUP BY a.idBarang, a.nama
输出
╔══════════╦════════════╦═══════════════════════════╗
║ IDBARANG ║ NAMA ║ IDKATEGORI ║
╠══════════╬════════════╬═══════════════════════════╣
║ 1 ║ Ban Becak ║ Ban Keren,Ban Dalam ║
║ 2 ║ Velg Becak ║ Velg Monster,Velg Canggih ║
╚══════════╩════════════╩═══════════════════════════╝
现在要做的理想事情是规范化表格。将值以逗号分隔值存储在单个列中是一种不好的做法。如果这是Many-to-Many
关系,请将当前设计转换为三表数据库。
<强>啷强>
<强>驾驶员学校强>
<强> Barang_Kategori 强>
样本记录
<强>啷强>
╔══════════╦════════════╗
║ IDBARANG ║ NAMA ║
╠══════════╬════════════╣
║ 1 ║ Ban Becak ║
║ 2 ║ Velg Becak ║
╚══════════╩════════════╝
<强>驾驶员学校强>
╔════════════╦══════════════╗
║ IDKATEGORI ║ NAMAKATEGORI ║
╠════════════╬══════════════╣
║ 1 ║ Ban Dalam ║
║ 2 ║ Velg Canggih ║
║ 3 ║ Ban Keren ║
║ 4 ║ Velg Monster ║
╚════════════╩══════════════╝
<强> Barang_Kategori 强>
╔══════════╦════════════╗
║ IDBARANG ║ IDKATEGORI ║
╠══════════╬════════════╣
║ 1 ║ 1 ║
║ 1 ║ 3 ║
║ 2 ║ 2 ║
║ 2 ║ 4 ║
╚══════════╩════════════╝
NEW QUERY
SELECT a.idBarang,
a.nama,
GROUP_CONCAT(c.namaKategori) KategoryLista
FROM barang a
INNER JOIN Barang_Kategori b
ON a.idBarang = b.idBarang
INNER JOIN Kategori c
ON b.idKategori = c.idKategori
GROUP BY a.idBarang, a.nama
答案 1 :(得分:0)
您需要在查询中使用JOIN
。这是关于这个主题的教程:
http://www.sitepoint.com/understanding-sql-joins-mysql-database/
答案 2 :(得分:-1)
我不知道这个查询是否有效,如果出现错误,请仔细检查:
SELECT Barang . idBarang , Barang . Nama , Kategori . namaKategori AS `idKategori`
FROM Barang
INNER JOIN Kategori ON Barang . idKategori = Kategori . idKategori
ORDER BY Barang . idBarang
但如果Barang . idKategori
上的数字与代码中的最底层表格分开,则上面查询的输出将是下表,无论如何您仍然可以尝试上面的代码:
idBarang | Nama | idKategori
-----------------------------------
1. | Ban Becak | Ban Dalam
1. | Ban Becak | Ban Keren
2. | Velg Becak| Velg Canggih
2. | Velg Becak| Velg Monster
如果查询不起作用。只是在您想要这样做时,尝试将Barang . idKategori
上的数字分开,如下所示!当然它会像上面的表一样工作。
Barang
---------------
idBarang | Nama | idKategori
-------------------------------
1 | Ban Becak | 1
1 | Ban Becak | 3
2 | Velg Becak | 2
2 | Velg Becak | 4