MySQL запрос из двух разных таблиц с взаимной условной - PullRequest
0 голосов
/ 31 августа 2011

Пожалуйста, помогите мне структурировать MySQL запрос

У меня есть 2 таблицы, # _ udjacomment И # _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 AS 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 будет иметь строку, похожую на word-word-another-word

именно поэтому у меня есть более обширное утверждение внутри условного if ($ include_link_to_comment == 1)

ОБНОВЛЕНИЕ: ЗАКЛЮЧИТЕЛЬНЫЙ ЗАПРОС СМОТРЕЛ, КАК ЭТО (Я РЕАЛИЗОВАЛ, ЧТО РЕСПОНДЕР ПРЕДЛАГАЛ И ИЗМЕНИЛ, ЗАЯВЛЕНИЕ ПО ДЕЛАМ И ГДЕ ЗАЯВЛЕНИЕ)

 $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;

1 Ответ

0 голосов
/ 31 августа 2011

Вам необходимо использовать внешнее соединение:

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