如果在第一个数据库表中找不到匹配项,则搜索第二个数据库表

时间:2014-08-09 17:55:36

标签: mysql sql

我有两个遵循这种格式的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.pagetitlemod_site_content.content中找到一个字符串,但如果不存在,也请搜索mod_site_tmplvar_contentvalues.value,但仅限于tmplvarid为2或3的位置。< / p>

目前,我最接近的是以下查询:

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知识非常有限。

1 个答案:

答案 0 :(得分:2)

您可以尝试运行以下代码:

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)