Php 在";加入;表匹配特定数据和/或不存在的数据
我创建了两个表来管理多语言文章系统:Php 在";加入;表匹配特定数据和/或不存在的数据,php,mysql,join,Php,Mysql,Join,我创建了两个表来管理多语言文章系统: 表1是一个用作所有注册文章索引的表 表1=(艺术ID、艺术作者、艺术日期) 表2是一个用于存储文章的所有语言版本的表 表2=(LOC_ID、LOC_标题、LOC_文本、LOC_LANG、ART_ID) 我的目标如下: 如果我选择英语作为语言 我需要看到的文章与现有的英语本地化,所以 我可以编辑它们,[如果存在与所选语言匹配的本地化,则它会将此本地化作为表2数据返回]。 我还需要看到没有任何本地化的文章(但是 文章索引已经存在于表1)所以我可以写英文
- 表1是一个用作所有注册文章索引的表 表1=(艺术ID、艺术作者、艺术日期)
- 表2是一个用于存储文章的所有语言版本的表 表2=(LOC_ID、LOC_标题、LOC_文本、LOC_LANG、ART_ID)
[如果存在与所选语言匹配的本地化,则它会将此本地化作为表2数据返回]。
[如果文章根本没有本地化,则返回空数据作为表2数据。
[如果没有与所选语言匹配的本地化,但有另一种本地化,则返回空数据作为表2数据。]
如果我使用:
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
WHERE table2.LOC_LANG = 'en'
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
WHERE table2.LOC_LANG = 'en' OR table2.LOC_LANG IS NULL
它返回所有语言的所有文章,但如果所选语言尚未本地化,则需要null数据。所以这不好
如果我使用:
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
WHERE table2.LOC_LANG = 'en'
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
WHERE table2.LOC_LANG = 'en' OR table2.LOC_LANG IS NULL
它返回所有用英语写的文章,但不返回那些没有本地化的文章,也不返回那些本地化为另一种语言的文章。所以这不好
如果我使用:
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
WHERE table2.LOC_LANG = 'en'
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
WHERE table2.LOC_LANG = 'en' OR table2.LOC_LANG IS NULL
它返回所有用英语写的文章和所有没有本地化的文章,但不返回那些用另一种语言本地化的文章。所以这不好
我尝试了一些子查询,是否存在,但没有达到目标 有人知道我可以用什么来让它工作吗? 这可能吗
谢谢。尝试将条件置于左联接中:
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON table1.ART_ID = table2.ART_ID
and table2.LOC_LANG = 'en'
尝试将条件置于左联接中:
SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
FROM table1
LEFT JOIN table2 ON table1.ART_ID = table2.ART_ID
and table2.LOC_LANG = 'en'
哼。。。它就像一个符咒。我甚至不知道我能在连接上做到这一点。非常感谢。嗯,好吧。。。它就像一个符咒。我甚至不知道我能在连接上做到这一点。非常感谢。我认为您需要所有数据,例如具有特定本地化、无本地化和具有相同本地化,那么您为什么要使用任何条件?只需为您的任务使用三个不同的查询我认为您需要所有数据,例如具有特定本地化、无本地化和具有相同本地化,那么为什么要使用任何条件呢?只需对任务使用三种不同的查询即可