2016-05-14 1 views
0

Мой вопрос прост. Как показать контент из трех таблиц на одной странице вместе, упорядоченный по дате.Три разных таблицы (sql) показывают как один контент

Это блог, где у меня есть сообщения, такие как статьи, статусы и цитаты.

СТАТЬЯ - Id, название, Фото, Текст, Тип Datetime (PHP - время())

СТАТУС - Id, заголовок, текст, тип, Datetime (PHP - время())

QUOTE - Id, Цитата, автор, тип, Datetime (PHP - время())

Мне нужно, чтобы показать содержимое на странице заказанный DATETIME. Затем я могу изменить html/css по типу сообщения.

Будет лучше объединить таблицы или показать их в массиве?

Спасибо за любую помощь.

ответ

1

Если вы хотите выполнить сортировку в MySQL, вам нужно объединить поля из трех таблиц и выполнить UNION ALL, а не JOIN. Вы можете использовать join, когда у вас есть какое-то отношение между тремя, насколько я вижу, эти таблицы не связаны.

Другим вариантом для вас является объединение результатов этих трех запросов в массиве.

$merged = array(); 

foreach($articles as $k => $article){ 
    $merged[$article['Datetime']] = array('table' => 'articles', 'id' => $k); 
} 
foreach($statuses as $k => $statuse){ 
    $merged[$statuse['Datetime']] = array('table' => 'statuses', 'id' => $k); 
}foreach($quotes as $k => $quote){ 
    $merged[$quote['Datetime']] = array('table' => 'quotes', 'id' => $k); 
} 

ksort($merged); 

foreach ($merged as $key => $value) 
{ 
    $arr = $$value['table']; 
    echo $arr[$value['id']]; 
} 

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

+0

Спасибо вам большое! Я узнал из вашего Php-скрипта что-то новое, но я создал его с помощью Sql. Я никогда не слышал об UNION ALL никогда раньше. Сейчас так просто. :) – user1468448

+0

У меня есть еще один вопрос. Пожалуйста, если я хочу загрузить все в этом UNION ALL sql, невозможно показать cols, которые не совпадают во всех таблицах. Как я могу получить этот контент без дополнительных sqls? – user1468448

+0

Это должно помочь, что вы думаете? SELECT столбец 1, столбец 2, '' AS 'столбец 3' FROM table a UNION SELECT столбец 1, столбец 2, столбец 3 из таблицы b – user1468448

1

Вы можете попробовать это query..but я сделал предположение о том, что тип является общим во всех трех таблицах

SELECT a.Id,a.Title,a.Photo,a.Text, 
a.Type,a.DateTime,s.Title,s.Text,q.Quote,q.Author,q.Type 
FROM ARTICLE a 
INNER JOIN STATUS s 
ON a.Type = b.Type 
INNER JOIN QUOTE q 
ON b.Type = q.Type 
GROUP BY a.Type 
ORDER BY a.Datetime ASC; 

Если тип не дает результата, то используйте идентификатор в «ON» состоянии Так, таблица структуры не определено прямо в вопросе.

+0

Спасибо за ответ, я знаю, что я не определил больше вещей в моем вопросе. Тип 1,2 или 3. Каждый тип сообщения имеет разный тип для разных html/css-стилей. :) – user1468448

0

Для тех, кто ищет simmilar решения я создал это таким простым способом:

SELECT id, datetime FROM article 
UNION ALL 
SELECT id, datetime FROM status 
UNION ALL 
SELECT id, datetime FROM quote 
ORDER BY datetime ASC; 

Теперь я знаю корочки сообщений и может показать все, отсортированных по DateTime.

Смежные вопросы