MySQL变量,GROUP_CONCAT,以后再使用它

Tic*_*okk 7 php mysql

我正在存储一份硬盘清单

SELECT @items := GROUP_CONCAT(ID) FROM table_1 ... etc
Run Code Online (Sandbox Code Playgroud)

@items现在是一串数字:55,77,99,2038,2844等

后来,我尝试在where子句中使用它:

SELECT * FROM table_2 WHERE table_1.ID IN (@items)
Run Code Online (Sandbox Code Playgroud)

这不起作用.好像应该这样.我知道当我手动拉取数据时,将其放入变量中,然后输出它可以工作:

list($x) = SELECT @items := GROUP_CONCAT(ID) FROM table_1 ... etc
$goodResults = SELECT * FROM table_2 WHERE table_1.ID IN ($x)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢.

Dan*_*llo 13

您可能想要使用该FIND_IN_SET()功能:

SELECT * FROM table_1 WHERE FIND_IN_SET(id, @items) > 0;
Run Code Online (Sandbox Code Playgroud)

测试用例:

CREATE TABLE table_1 (id int, group_id int);
INSERT INTO table_1 VALUES (1, 1);
INSERT INTO table_1 VALUES (2, 1);
INSERT INTO table_1 VALUES (3, 1);
INSERT INTO table_1 VALUES (4, 1);
INSERT INTO table_1 VALUES (5, 1);

SELECT @items := GROUP_CONCAT(id) FROM table_1 GROUP BY group_id;

SELECT * FROM table_1 WHERE FIND_IN_SET(id, @items) > 0;
+------+----------+
| id   | group_id |
+------+----------+
|    1 |        1 |
|    2 |        1 |
|    3 |        1 |
|    4 |        1 |
|    5 |        1 |
+------+----------+
5 rows in set (0.02 sec)
Run Code Online (Sandbox Code Playgroud)

SQL FIDDLE