Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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
Php 在";加入;表匹配特定数据和/或不存在的数据_Php_Mysql_Join - Fatal编程技术网

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数据返回]。

  • 我还需要看到没有任何本地化的文章(但是 文章索引已经存在于表1)所以我可以写英文 版本,
    [如果文章根本没有本地化,则返回空数据作为表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'
    

    哼。。。它就像一个符咒。我甚至不知道我能在连接上做到这一点。非常感谢。嗯,好吧。。。它就像一个符咒。我甚至不知道我能在连接上做到这一点。非常感谢。我认为您需要所有数据,例如具有特定本地化、无本地化和具有相同本地化,那么您为什么要使用任何条件?只需为您的任务使用三个不同的查询我认为您需要所有数据,例如具有特定本地化、无本地化和具有相同本地化,那么为什么要使用任何条件呢?只需对任务使用三种不同的查询即可