1

タグ付けシステムを書いています。

タグのテーブルと、タグ付けされたアイテム ID とタグの ID で構成されるタグ付けされたアイテムでいっぱいのテーブルがあります。

特定のアイテムのタグを簡単に視覚化/編集できるように、いくつかのチェックボックスを生成するためのデータを提供するフェッチ スクリプトを作成しています。

私は、checked と呼ばれる一時的な値を追加し、指定されたアイテム ID がタグ付けされたテーブル (このタグがある) に存在するという条件で、一時的なチェック値をテーブルに true に設定するというアイデアを思いつきました。

SELECT t.name AS name, t.id AS id, '0' AS checked  FROM tags t IF( id IN (SELECT DISTINCT tag_id FROM tagged WHERE workshop_id = $id) UPDATE t SET checked='1'

一般的なSQLエラーをスローするだけで、機能しません。これが本当に悪い考えなのか、それとも実行可能なのかさえ、私には十分な経験がありません。任意の入力をいただければ幸いです。

4

1 に答える 1

1

は必要ありません。式をUPDATE使用して、テーブルにCASEあるかどうかをテストし、それを一時列に入れることができます。次のようになります。tags.idtaggedchecked

SELECT 
  t1.id AS id,
  t1.name AS name, 
  CASE WHEN t2.tag_id IS NULL THEN 0 ELSE 1 END AS Checked
FROM tags AS t1
LEFT JOIN
(
   SELECT * 
   FROM tagged
) AS t2 ON t1.id = t2.tag_id;

ここで実際にそれを見てください:

これにより、次のようなものが得られます。

| ID | NAME | CHECKED |
-----------------------
|  1 |    a |       1 |
|  2 |    b |       0 |
|  3 |    c |       1 |
|  4 |    d |       0 |

アップデート:

taggedのようにテーブルに条件を追加する場合は、次のように、条件でWHERE workshop_id = 26はなくサブクエリに追加します。LEFT JOIN

SELECT 
  t1.id AS id,
  t1.name AS name, 
  CASE WHEN t2.tag_id IS NULL THEN 0 ELSE 1 END AS Checked
FROM tags AS t1
LEFT JOIN
(
   SELECT * 
   FROM tagged
   WHERE workshop_id = 26
) AS t2 ON t1.id = t2.tag_id;
于 2013-05-19T05:48:50.047 に答える