1

私は2つのテーブルimages2image_dataを持っています

ここに画像の説明を入力 ここに画像の説明を入力

したがって、目標は、すべての画像アップロード (images2) に対して 1 つのテーブルを用意することであり、image_data はその画像にさまざまなオプションを割り当てることです。

たとえば、ここにいくつかのサンプル データがあります。

ここに画像の説明を入力

このイメージは TN と CQ の両方に関連付けられているため、image_id 10 には複数の行があります。また、それらは複数の言語とスライドに関連付けることもできるため、新しい行を追加するよりも、2 行目に追加して、slide_id または language_id を変更します。

目標は、すべての画像のリストを作成することです。それをクリックするとポップアップが表示され、オプションを編集してそこから直接変更できます。

ここに画像の説明を入力

クエリの作成に助けが必要です。私が今持っているもの:

SELECT images2.id, images2.filename, image_data.slide_id, image_data.language_id,
image_data.type FROM images2 
LEFT JOIN image_data ON images2.id = image_data.image_id

そのクエリにはいくつか問題があります.image_id 10には2つの行があるため、重複が表示されています。

ここに画像の説明を入力

しかし、画像 #10 の 2 行目が必要です。これは、CQ にも関連付けられていることを確認する必要があるためです。これにより、ポップアップしたときにチェックボックスをオンにできます。

そのため、すべてのオプションを使用して、重複のないすべての一意の画像を表示するクエリを作成する必要があります。

これを行う最善の方法がわかりません..データベーステーブルの方法をやり直す必要がありますか? どんな助けでも大歓迎です。

ありがとう。

4

2 に答える 2

2

できることはGROUP_CONCAT()、複数の行の値を単一の連結文字列に変換するために使用することです。以下は、フォームのIDslideslanguages名前を取得して、フォームをわかりやすくします。

SELECT
    a.id,
    a.filename,
    GROUP_CONCAT(CONCAT(b.slide_id, '::', c.slide_name)) AS slides,
    GROUP_CONCAT(CONCAT(b.language_id, '::', d.language_name)) AS languages,
    GROUP_CONCAT(b.type) AS types,
FROM 
    images a
LEFT JOIN
    image_data b ON a.id = b.image_id
LEFT JOIN 
    slides c ON b.slide_id = c.id
LEFT JOIN
    languages d ON c.language_id = d.id
GROUP BY
    a.id

画像の結果セットは次の10ようになります。

id    |    image_filename    |    slides    |    languages    |    types
-------------------------------------------------------------------------
10    |    p170sfhe...       |    5::slide5 |    1::language1 |    TN,CQ

PHPではexplode()、区切り文字に基づく文字列のみ。

于 2012-06-30T18:06:28.050 に答える
1

GROUP_CONCATを使用して、フィールドのcsvを取得できます。

SELECT
  images2.id,
  images2.filename,
  GROUP_CONCAT(DISTINCT image_data.slide_id) AS slides,
  GROUP_CONCAT(DISTINCT image_data.language_id) AS langs,
  GROUP_CONCAT(DISTINCT image_data.type) AS types
FROM images2 
LEFT JOIN image_data ON (images2.id = image_data.image_id)
GROUP BY images2.id
于 2012-06-30T18:04:58.613 に答える