2011-08-30 63 views
0

请帮我构建MySQL查询的MySQL查询与互惠条件

我有2个表,#_ udjacomment AND# _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; 

但我没有得到正确的结果。如果我停止试图从表#__content AS com_content访问,然后我得到了#__udjacomment结果作为udja纠正

所以,我想我询问如何可以表明,包括我想要的领域约束com_content.alias WHERE com_content.id = SUBSTRING_INDEX(udja.comment_url,':',-1)

在某些情况下,udja.comment_url都会有这样的格式com_content:22,com_content:19

,并在其他情况下,udja.comment_url将有一个像串词词的另一个字

这这就是为什么我在条件if($ include_link_to_comm ENT == 1)

UPDATE:最终查询这个样子(我实现什么RESPONDER提出并改变的情况下语句和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; 
+0

此问题与您的编程语言或您的查询构建逻辑无关;它是一个* SQL *问题:下一次请删除编程代码并仅保留* SQL。 – Bohemian

回答

0

您需要使用外部联接:

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

这并没有改变。我得到的结果是skip字段,其中udja.comment_url的字符串类似于字 - 字 - 另一个字符而不是com_content:23换句话说,我只得到字段udja.comment_url具有格式的结果com_comment:23请注意,我已经更改CASE语句,从CASE当LOCATE('com_content:',udja.comment_url)= 1到CASE当LOCATE('com_content:',udja.comment_url)> 0,因为我想要的是格式为com_content:23时的CONCAT和格式为word-word-anotherword时的content.alias – IberoMedia