2011-08-30 62 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