0

我有一个带有值的表,主键是具有增量的唯一 ID。其次,我有另一个表,它保存第一个表中的 id 以及其他数据。id 存储在 already_used 列中, already_used 列应如下所示:1,2,3,4,5,6...。

现在我使用带有 CONCAT 的查询来用数据填充 already_used 列:

UPDATE table2 SET already_used = CONCAT(already_used,', ". $id ."') WHERE id = $table_id

现在我的问题是,如果 already_used 列是空的,concat 将产生如下输出: ,1,2,3,4,5,6...

所以第一个值前面有一个逗号。如何调整查询以使第一个值实际上没有逗号?

后来我使用 PHP 将 already_used 数据存储在一个变量中,然后我想使用 NOT IN 语句从 table1 中查找所有尚未使用的行:

SELECT * FROM table1 WHERE id NOT IN($variable)

如果前面有逗号,它会给出一个mysql错误。

4

3 回答 3

1

切勿将多个值存储在单个列中。绝不!

请更改您的数据库设计以idtable2.

于 2013-06-25T18:29:40.490 回答
0

在连接之前使用IForCASE进行测试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 不能被索引。这就是为什么关系表通常是更好的设计。

于 2013-06-25T18:30:21.743 回答
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
于 2013-06-25T18:30:55.623 回答