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.idtagged表中找到,并将其放在临时列checked中,如下所示:

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 回答