从两个具有相互条件的不同表进行mySQL查询
请帮我构造mysql查询 我有两张桌子,\u udjacomment和\u content 目前我有疑问:从两个具有相互条件的不同表进行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 .
$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