Левое объединение не отображает строки, содержащие нулевые значения в Joomla, но хорошо в MySQL? - PullRequest
0 голосов
/ 13 марта 2012

Уже более суток я бьюсь головой об стену - надеясь, что кто-нибудь сможет пролить на это свет.

Я запустил это в phpmyadmin, нет проблем.
Запустите его в Joomla,не возвращает никаких записей, если есть нулевое значение.

(обзор) Я разрабатываю компонент в бэкэнде, где менеджер может проверить, выполнил ли конкретный поставщик определенные требования.Требования хранятся в таблице вопросов (и они подразделяются на несколько модов), а записи провайдеров хранятся в таблице провайдеров.Вскоре это будет связано с одной большой таблицей, которая показывает всех пользователей, нажмите на пользователя и получите эту таблицу с соответствующими флажками для каждого вопроса, чтобы проверить, закончили ли они его.

Вот структура:

Таблица вопросов: вопрос_ид вопрос_мод вопрос_описание

Таблица провайдеров: идентификатор_поставщика_производителя_доставка_процента_доставщика_производителя

Запрос MySQL (работает должным образом):

SELECT p.provider_id
    , p.provider_userid     
    , q.question_mod
    , q.question_id
    , p.question_id                 
    , q.question_description
    , p.provider_passedchk
FROM `jos_assess_questions` AS q
LEFT JOIN `jos_assess_providers` AS p ON q.question_id = p.question_id  AND p.provider_userid =40
WHERE q.question_mod = 1
ORDER BY p.provider_userid

LIMIT 0,1000

В Joomla (в модели возвращает пустую таблицу):

public function getListQuery()
{
        $query = parent::getListQuery();
        $question_mod = JRequest::getVar('modID');
        $userId = JRequest::getVar('userID');

        $db =& JFactory::getDBO();          
        $query = $db->getQuery(true);

        $query->SELECT('p.provider_id
        , p.provider_userid     
        , q.question_mod
        , q.question_id
        , p.question_id                 
        , q.question_description
        , p.provider_passedchk                                      
        , p.published
        ');
        $query->FROM (' #__assess_questions AS q');
        $query->LEFTJOIN (' #__assess_providers AS p ON q.question_id = p.question_id AND p.provider_userid='.$userId.'');
        $query->WHERE ('q.question_mod = '.$question_mod.'');
        $query->ORDERBY (' p.provider_userid');
               $db->setQuery($query);   

return $query;

}

Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 13 марта 2012

Включите профилирование отладки, чтобы вы могли точно видеть, какие запросы выполняются.

Как только вы найдете конкретный запрос в профилировщике, запустите его в phpMyAdmin и посмотрите, получите ли вы тот же результат.

Если вы делаете тот же результат, проверьте, как вы отображаете данные, поскольку это, вероятно, будет причиной возникновения проблемы.

...