2013-06-19 4 views
0

я пытаюсь перечислить последние обновления из двух таблиц doc_to_do и doc_bug_tracker ниже моя структура таблицыВыберите два стола и заказ по дате

doc_to_do enter image description here

doc_bug_tracker enter image description here

и это мой текущий запрос:

$sth = $this->db->prepare('SELECT p.*, 
     dtd.projects_id as dtd_projects_id, dtd.content as dtd_content, dtd.date_modified as dtd_date_modified, 
     dbt.projects_id as dbt_projects_id, dbt.content as dbt_content, dbt.date_modified as dbt_date_modified 
     FROM `projects` p LEFT JOIN `doc_to_do` dtd ON p.id=dtd.projects_id 
     LEFT JOIN `doc_bug_tracker` dbt ON p.id=dbt.projects_id 
     where p.id="'.$project_id.'"'); 

так теперь как заказать по date_modified либо из таблицы doc_to_do или doc_bug_tracker?

ответ

1

Чтобы получить только последнюю дату (в отличие от всех дат, упорядоченный по убыванию) попробуйте это:

SELECT 
    p.id, 
    MAX(GREATEST(dtd.date_modified, dbt.date_modified)) AS MaxDate 
FROM projects p 
LEFT JOIN doc_to_do dtd ON p.id = dtd.projects_id 
LEFT JOIN doc_bug_tracker dbt ON p.id = dbt.projects_id 
WHERE p.id = <project_id> 
GROUP BY p.id 

Если вам нужны дополнительные столбцы в SELECT, обязательно включите их в свой GROUP BY.

0

Это должно работать:

'SELECT x.* FROM 
(
    SELECT p.*, 
     dtd.projects_id as dtd_projects_id, dtd.content as dtd_content, dtd.date_modified as dtd_date_modified, 
     dbt.projects_id as dbt_projects_id, dbt.content as dbt_content, dbt.date_modified as dbt_date_modified 
     FROM `projects` p LEFT JOIN `doc_to_do` dtd ON p.id=dtd.projects_id 
     LEFT JOIN `doc_bug_tracker` dbt ON p.id=dbt.projects_id 
     where p.id="'.$project_id.'" 
) x 
ORDER BY x.date_modified ASC' 
Смежные вопросы