从两个具有相互条件的不同表进行mySQL查询

从两个具有相互条件的不同表进行mySQL查询,mysql,multiple-tables,Mysql,Multiple Tables,请帮我构造mysql查询 我有两张桌子,\u udjacomment和\u content 目前我有疑问: $query = "SELECT udja.id"; if( $include_author == 1 ) $query .= ", udja.full_name"; if( $include_date == 1 ) $query .= ", udja.time_added"; if( $include_comment == 1 ) $query .

请帮我构造mysql查询

我有两张桌子,\u udjacomment和\u content

目前我有疑问:

$query  = "SELECT udja.id";

      if( $include_author == 1 ) $query .= ", udja.full_name";
      if( $include_date == 1 ) $query .= ", udja.time_added";
      if( $include_comment == 1 ) $query .= ", if(CHAR_LENGTH(udja.content) > ".$content_number_of_characters.", SUBSTR(udja.content, 1, ".$content_number_of_characters."), udja.content) AS content";
      if( $include_link_to_comment == 1 ){ 
        $query .= ", CASE WHEN LOCATE('com_content:', udja.comment_url) > 0 
        THEN CONCAT(SUBSTRING_INDEX(udja.comment_url,':',-1),'-', com_content.alias, '.html')
        ELSE udja.comment_url END AS comment_url";
        }

      $query .= " FROM #__udjacomments AS udja, #__content AS com_content WHERE udja.is_published = 1 AND com_content.id = SUBSTRING_INDEX(udja.comment_url,':',-1) AND com_content.checked_out = 0 ORDER by udja.id DESC limit ".$number_of_comments;
但是我没有得到正确的结果。如果我停止尝试从表uu content作为com_content访问,那么我会将uu udjacomment的结果作为udja correct

因此,我想我是在问,如何指示并包含我想要的字段com_content.alias,其中com_content.id=SUBSTRING_INDEXudja.comment_url,':',-1

在某些情况下,udja.comment\u url的格式为com\u content:22,com\u content:19

在其他情况下,udja.comment\uURL将有一个类似于字符串的单词“另一个单词”

这就是为什么在条件if$include\u link\u to\u comment==1中有更广泛的语句

更新:最后的查询看起来像这样,我实现了响应者的建议,并更改了CASE语句和WHERE语句

 $query  = "SELECT udja.id";

      if( $include_author == 1 ) $query .= ", udja.full_name";
      if( $include_date == 1 ) $query .= ", udja.time_added";
      if( $include_comment == 1 ) $query .= ", if(CHAR_LENGTH(udja.content) > ".$content_number_of_characters.", SUBSTR(udja.content, 1, ".$content_number_of_characters."), udja.content) AS content";
      if( $include_link_to_comment == 1 ){ 
        $query .= ", CASE 
            WHEN LOCATE('com_content:', udja.comment_url)<>0
            THEN CONCAT(SUBSTRING_INDEX(udja.comment_url,':',-1),'-', com_content.alias, '.html')
            ELSE udja.comment_url 
            END AS comment_url";

        }
//          THEN CONCAT(SUBSTRING_INDEX(udja.comment_url,':',-1),'-', com_content.alias, '.html')
      $query .= " FROM #__udjacomments AS udja
                    LEFT JOIN #__content AS com_content 
                        ON com_content.id = SUBSTRING_INDEX(udja.comment_url,':',-1) 
                    WHERE udja.is_published = 1 ORDER by udja.id DESC limit ".$number_of_comments;

您需要使用外部联接:

...
FROM #__udjacomments AS udja
LEFT JOIN #__content AS com_content 
    on com_content.id = SUBSTRING_INDEX(udja.comment_url,':',-1)
WHERE ...

这个问题与您的编程语言或查询构建逻辑无关;这是一个SQL问题:下次请删除编程代码,只保留SQL。这并没有什么不同。我得到的结果是,udja.comment\u url中有一个类似字符串的单词,另一个单词而不是com\u内容:23。换句话说,我只得到udja.comment\u url中的字段格式为com\u comment:23的结果。请注意,我更改了CASE语句,从CASE WHEN LOCATE'com\u content:'开始,udja.comment_url=1在定位“com_content:”时使用大小写,udja.comment_url>0,因为当格式为com_content:23时需要CONCAT,当格式为word时需要content.alias