Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL:有条件地向表中添加和更新临时列_Php_Mysql - Fatal编程技术网

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

Php MYSQL:有条件地向表中添加和更新临时列,php,mysql,Php,Mysql,我正在写一个标签系统 我有一个标签表,还有一个完整的标签项,由标签项ID和标签ID组成 我正在编写一个获取脚本,该脚本将为数据生成一些复选框,以便我可以轻松地可视化/编辑给定项的标记 我想添加一个名为checked的临时值,然后在标记表中存在一个提供的条目ID的条件下,它有这个标记,然后在我的表中将temp check值设置为true SELECT t.name AS name, t.id AS id, '0' AS checked FROM tags t IF( id IN (SELECT

我正在写一个标签系统

我有一个标签表,还有一个完整的标签项,由标签项ID和标签ID组成

我正在编写一个获取脚本,该脚本将为数据生成一些复选框,以便我可以轻松地可视化/编辑给定项的标记

我想添加一个名为checked的临时值,然后在标记表中存在一个提供的条目ID的条件下,它有这个标记,然后在我的表中将temp check值设置为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错误,不起作用。我没有足够的经验来判断这是否真的是一个坏主意,甚至它是否可行。任何输入都将不胜感激。

您不需要更新,您可以使用CASE表达式测试tags.id是否在tagged表中找到,并将其放入选中的临时列中,类似于以下内容:

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 |
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;
请在此处查看它的实际操作:

这将为您提供如下信息:

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 |
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;
更新: 如果要将条件添加到标记表中,如WHERE workshop_id=26,请将其添加到子查询中,而不是左侧联接条件,如下所示:

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 |
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;
您不需要更新,可以使用CASE表达式来测试tags.id是否在taged表中找到,并将其放入选中的临时列中,如下所示:

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 |
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;
请在此处查看它的实际操作:

这将为您提供如下信息:

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 |
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;
更新: 如果要将条件添加到标记表中,如WHERE workshop_id=26,请将其添加到子查询中,而不是左侧联接条件,如下所示:

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 |
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;

我们可以有两个表的简化示例,每个表中有几行示例数据吗?我们可以有两个表的简化示例,每个表中有几行示例数据吗?选择t1.id作为id,t1.name作为name,当t2.workshop_id为NULL时,则0否则1结束,从标记为t1的标记中选中左连接选择*从标记为t2的26=t2.workshop_id;这与我想要的非常接近,但我需要根据外部id进行筛选…我尝试了硬编码26,但它只生成了一个巨大的表…如果我这样尝试,您的解决方案仍然有效吗?选择t1.id作为id,t1.name作为名称,当t2.workshop_id为NULL时,则0否则1结束,从标记为t1的标记中选中左连接选择*从标记为t2的26=t2.workshop_id;这非常接近我想要的,但我需要根据外部id将其过滤掉…我尝试硬编码26,但它只生成一个巨大的表…如果我这样尝试,您的解决方案仍然有效吗?