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リレーションシップである場合は、現在の設計を 3 テーブル データベースに変換します。

バラン

  • イドバラン (PK)
  • 名前

カテゴリー

  • 同一カテゴリ (PK)
  • なまカテゴリー

Barang_Categori

  • イドバラン (FK)
  • 同一カテゴリ (FK)

サンプルレコード

バラン

╔══════════╦════════════╗
║ IDBARANG ║    NAMA    ║
╠══════════╬════════════╣
║        1 ║ Ban Becak  ║
║        2 ║ Velg Becak ║
╚══════════╩════════════╝

カテゴリー

╔════════════╦══════════════╗
║ IDKATEGORI ║ NAMAKATEGORI ║
╠════════════╬══════════════╣
║          1 ║ Ban Dalam    ║
║          2 ║ Velg Canggih ║
║          3 ║ Ban Keren    ║
║          4 ║ Velg Monster ║
╚════════════╩══════════════╝

Barang_Categori

╔══════════╦════════════╗
║ 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 に答える