我有一个带有值的表,主键是带增量的唯一ID。 其次,我有另一个表,用于保存第一个表中的ID以及其他数据。 id存储在already_used列中 already_used列应如下所示:1,2,3,4,5,6 ....
现在我使用CONCAT查询来填充已经使用过的列:
UPDATE table2 SET already_used = CONCAT(already_used,', ". $id ."') WHERE id = $table_id
现在我的问题是,如果already_used列为空,concat将生成如下输出:,1,2,3,4,5,6 ...
所以第一个值前面有一个逗号。我怎样才能调整查询,以便第一个值实际上不会在它前面显示逗号?
稍后我使用PHP将已经使用过的数据存储在一个变量中,然后我想找到table1中所有尚未使用NOT IN语句使用的行:
SELECT * FROM table1 WHERE id NOT IN($variable)
如果前面有逗号,则会出现mysql错误。
答案 0 :(得分:1)
请更改您的数据库设置,以便在id
中仅为每条记录存储一个table2
。
答案 1 :(得分:0)
在联接之前使用IF
或CASE
来测试already_used
:
UPDATE table2
SET already_used = IF(already_used = '', '$id', CONCAT(already_used, ',$id'))
WHERE id = $table_id
在第二个查询中,您应该使用FIND_IN_SET
:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2
ON FIND_IN_SET(t1.id, t2.already_used)
WHERE t2.id IS NULL
但是,FIND_IN_SET无法编入索引。这就是为什么关系表通常是一个更好的设计。
答案 2 :(得分:0)
UPDATE table2 WHEN already_used IS NULL THEN SET already_used = CONCAT(already_used,'". $id ."') WHEN already_used IS NOT NULL THEN SET already_used = CONCAT(already_used,', ". $id ."') WHERE id = $table_id