php - MYSQL:有条件地向表中添加和更新临时列

标签 php mysql

我正在编写一个标记系统。

我有一个标签表,还有一个充满标签的项目,由标签项目 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/

相关文章:

php - 如何将数据库表中的 SQL 数据回显到 <select> 表单中?

php - 条件,如果搜索栏为空则返回错误html

mysql - 用于获取用户信息的 Spring Social Facebook 应用程序设置

mysql - Amazon RDS(关系数据存储)和 SSIS

php - MySQL 查询在 3 列中搜索 MATCH?

php - 在 Flot 中显示时间戳中的日期

php - 复选框的作用类似于单选按钮,选中前四个或后四个复选框,但不能同时选中两个 - javascript?

php - Rest API(高级或专业帐户)

php - 当我使用 WHERE 子句时,我的基本实体值为 NULL

php - 如何为 opencart 多商店使用单独的语言文件?