我有一个名为“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%"
除非我删除AND部分,否则不会返回任何结果。我需要它来返回匹配的结果。我可能错过了理解LEFT JOIN,它总是让我感到困惑。我猜的问题是LEFT JOIN返回多行,而我的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
数据示例:
两个表中有1000行作为示例:
灵感有一行ID为“123”,关键字为“blabla,bright,yellow,happy”,而集合中有一行激励为“2074,123,42”。
我希望只有在关键字字段中包含“%bright%”的启发灵感的集合才能返回。
以下是我用来显示问题的SQL:sqlfiddle.com /#!9 / 5a1f90 / 10
但是非常感谢所有帮助过的人和Daniel E分享使用“find_in_set”来解决问题,请注意我必须添加“GROUP BY 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
答案 0 :(得分:2)
您可以使用函数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';
查询1 :
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%"
<强> Results 强>:
| id | uid | title | inspids | private | tstamp |
|-----|-----|----------------------|-------------|---------|------------|
| 100 | 12 | A collection example | 2742,123,42 | 0 | 1523272320 |