1

我这里有一个小问题......让我解释一下..

假设我有一张这样的桌子......

巴朗

╔══════════╦════════════╦════════════╗
║ 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 但一无所获......

之前感谢您的帮助...

4

3 回答 3

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关系,则将当前设计转换为三表数据库。

巴朗

  • 伊德巴朗 (PK)
  • 姓名

分类

  • idkategori (PK)
  • 名类别

Barang_Kategori

  • 伊德巴朗 (FK)
  • idkategori (FK)

样本记录

巴朗

╔══════════╦════════════╗
║ 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 ║
╚══════════╩════════════╝

新查询

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
于 2013-04-05T06:40:17.883 回答
0

您需要JOIN在查询中使用。这是有关该主题的教程:

http://www.sitepoint.com/understanding-sql-joins-mysql-database/

于 2013-04-05T06:40:15.930 回答
-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
于 2013-04-05T07:13:31.447 回答