我正在编写一个标记系统。
我有一个标签表,还有一个充满标签的项目,由标签项目 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 错误并且不起作用。我没有足够的经验来判断这是否是一个非常糟糕的主意,或者它是否可行。任何输入将不胜感激。
最佳答案
你不需要UPDATE
,你可以使用CASE
表达式来测试tags.id
是否在tagged中找到
表,并将其放在临时列 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;
关于php - MYSQL:有条件地向表中添加和更新临时列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16631813/