我有两个遵循此格式的MySQL表:
mod_site_content mod_site_tmplvar_contentvalues
----------------------------- ---------------------------------------------
id | pagetitle | content id | tmplvarid | contentid | value
----------------------------- ---------------------------------------------
1 | Project 1 | <p> ... </p> 1 | 1 | 1 | 12.08.2014
2 | Project 2 | <p> ... </p> 2 | 1 | 2 | 13.08.2014
3 | Project 3 | <p> ... </p> 3 | 2 | 1 | <img src="..."/>
4 | Project 4 | <p> ... </p> 4 | 2 | 4 | <img src="..."/>
5 | Project 5 | <p> ... </p> 5 | 3 | 4 | [{"key":"val"...
6 | Project 6 | <p> ... </p> 6 | 3 | 5 | [{"key":"val"...
mod_site_content是代表网页的资源列表,并且mod_site_tmplvar_contentvalues是(可选)附加页面内容。
假设我想在
mod_site_content.pagetitle
或mod_site_content.content
中找到一个字符串,但是如果不存在,也搜索mod_site_tmplvar_contentvalues.value
,但仅在tmplvarid
是2或3的情况下。当前,最接近的是以下查询:
SELECT * FROM mod_site_content
INNER JOIN mod_site_tmplvar_contentvalues
ON mod_site_content.id = mod_site_tmplvar_contentvalues.contentid
WHERE
tmplvarid = 2 OR
tmplvarid = 3 AND
pagetitle LIKE ? OR
content LIKE ? OR
value LIKE ?
但这会产生比预期更大的结果数组,其中看起来有很多重复项。
它还以意外的方式合并了两个表。例如如果
Project 1
不包含匹配项,但第二个表中的id 3
包含匹配项,我想返回Project 1
并将第二个表的结果推入数组。我知道这个问题有点冗长,但是我想清楚一点,因为我的SQL知识非常有限。
最佳答案
您可以尝试运行以下代码:
SELECT * FROM mod_site_content
INNER JOIN mod_site_tmplvar_contentvalues
ON mod_site_content.id = mod_site_tmplvar_contentvalues.contentid
WHERE tmplvarid IN (2,3) AND
1= (CASE WHEN pagetitle LIKE ? OR content LIKE ? THEN 1
WHEN value LIKE ? THEN 1
ELSE 0 END)
关于mysql - 如果在第一个数据库表中找不到匹配项,则搜索第二个数据库表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25221479/