Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
Mysql 仅返回检查多个连接行的行_Mysql - Fatal编程技术网

Mysql 仅返回检查多个连接行的行

Mysql 仅返回检查多个连接行的行,mysql,Mysql,我有一个名为“collections”的表,其中有一个逗号分隔的id字段,与另一个名为“inspirations”的表相关 我想选择包含可以通过where子句过滤的灵感的集合行。举一个我尝试过的例子可能更容易: 以下是我正在尝试的: SELECT collections.id,collections.uid,title,inspids,private,collections.tstamp FROM collections LEFT JOIN inspirations ON "%"+inspira

我有一个名为“collections”的表,其中有一个逗号分隔的id字段,与另一个名为“inspirations”的表相关

我想选择包含可以通过where子句过滤的灵感的集合行。举一个我尝试过的例子可能更容易:

以下是我正在尝试的:

SELECT collections.id,collections.uid,title,inspids,private,collections.tstamp FROM collections
LEFT JOIN inspirations ON "%"+inspirations.id+"%" LIKE inspids
WHERE collections.uid = "54"
AND inspirations.keywords LIKE "%bright%"
除非删除和部分,否则不会返回任何结果。我需要它来返回匹配的结果。我可能是想了解左联,它总是让我困惑。我猜测的问题是,左连接返回多行,而我的WHERE不知道如何搜索所有行,我是否需要以某种方式执行“搜索所有左连接行”

或者可能有一种完全不同的方法来实现这一点

谢谢你事先的帮助


根据@Alpesh Jikadra的以下要求:

集合表结构:

id, uid, parent, title, inspids, private, collabs, ord, tstamp
id, uid, image, filters, caption, keywords, tstamp, thumb, stat_views, hide_from_search, ord
灵感表结构:

id, uid, parent, title, inspids, private, collabs, ord, tstamp
id, uid, image, filters, caption, keywords, tstamp, thumb, stat_views, hide_from_search, ord
数据示例:

两个表中都有1000行,例如:

inspirations有一行id为“123”,关键字为“blabla,bright,yellow,happy”,collections有一行inspids为“2074123,42”

我希望只有在关键字字段中包含“%bright%”的灵感丰富的集合才能返回


下面是我用来说明我的问题的SQL:sqlfiddle.com/#!9/5a1f90/10

但非常感谢所有提供帮助的人,感谢Daniel E分享使用“在集合中查找集合”来解决问题,请注意,我必须添加“groupby collections.id”以仅传回唯一集合,例如:

SELECT collections.id,collections.uid,title,inspids,private,collections.tstamp FROM collections
LEFT JOIN inspirations ON find_in_set(inspirations.id, collections.inspids) > 0
WHERE collections.uid = "54"
AND inspirations.keywords LIKE "%bright%"
GROUP BY collections.id

您可以使用函数find_in_set:

MySQL 5.6架构设置

CREATE TABLE collections (
id int,
uid int,
parent int,
title varchar(255),
inspids varchar(255),
private int,
collabs varchar(255),
ord int,
tstamp varchar(255)
);

CREATE TABLE inspirations (
id int,
uid int,
image varchar(255),
filters varchar(255),
caption varchar(255),
keywords varchar(255),
tstamp varchar(255)
);

INSERT INTO collections SET id='100', uid='12', title='A collection example', inspids='2742,123,42',private='0',collabs='',ord='0',tstamp='1523272320';
INSERT INTO inspirations SET id='2742', uid='47', keywords='blabla,bright,test';
SELECT collections.id,collections.uid,title,inspids,private,collections.tstamp FROM collections
LEFT JOIN inspirations ON find_in_set(inspirations.id, collections.inspids) > 0
WHERE collections.uid = "12"
AND inspirations.keywords LIKE "%bright%"
|  id | uid |                title |     inspids | private |     tstamp |
|-----|-----|----------------------|-------------|---------|------------|
| 100 |  12 | A collection example | 2742,123,42 |       0 | 1523272320 |
查询1

CREATE TABLE collections (
id int,
uid int,
parent int,
title varchar(255),
inspids varchar(255),
private int,
collabs varchar(255),
ord int,
tstamp varchar(255)
);

CREATE TABLE inspirations (
id int,
uid int,
image varchar(255),
filters varchar(255),
caption varchar(255),
keywords varchar(255),
tstamp varchar(255)
);

INSERT INTO collections SET id='100', uid='12', title='A collection example', inspids='2742,123,42',private='0',collabs='',ord='0',tstamp='1523272320';
INSERT INTO inspirations SET id='2742', uid='47', keywords='blabla,bright,test';
SELECT collections.id,collections.uid,title,inspids,private,collections.tstamp FROM collections
LEFT JOIN inspirations ON find_in_set(inspirations.id, collections.inspids) > 0
WHERE collections.uid = "12"
AND inspirations.keywords LIKE "%bright%"
|  id | uid |                title |     inspids | private |     tstamp |
|-----|-----|----------------------|-------------|---------|------------|
| 100 |  12 | A collection example | 2742,123,42 |       0 | 1523272320 |

CREATE TABLE collections (
id int,
uid int,
parent int,
title varchar(255),
inspids varchar(255),
private int,
collabs varchar(255),
ord int,
tstamp varchar(255)
);

CREATE TABLE inspirations (
id int,
uid int,
image varchar(255),
filters varchar(255),
caption varchar(255),
keywords varchar(255),
tstamp varchar(255)
);

INSERT INTO collections SET id='100', uid='12', title='A collection example', inspids='2742,123,42',private='0',collabs='',ord='0',tstamp='1523272320';
INSERT INTO inspirations SET id='2742', uid='47', keywords='blabla,bright,test';
SELECT collections.id,collections.uid,title,inspids,private,collections.tstamp FROM collections
LEFT JOIN inspirations ON find_in_set(inspirations.id, collections.inspids) > 0
WHERE collections.uid = "12"
AND inspirations.keywords LIKE "%bright%"
|  id | uid |                title |     inspids | private |     tstamp |
|-----|-----|----------------------|-------------|---------|------------|
| 100 |  12 | A collection example | 2742,123,42 |       0 | 1523272320 |

请分享表格结构和示例输入数据,并分享预期输出,以确保我已更新我的答案。。如果它看起来有点神秘,我理解:(请为您的预期输出添加插入查询或添加到抱歉我一直在摆弄…这表明了我遇到的问题,它不会返回此集合行。在问题中添加您的SQLFIDLE;)非常感谢!这正是我需要的!