#php #html #mysql
#php #HTML #mysql
Вопрос:
У меня есть несколько таблиц с различным содержимым. Чего я хочу добиться, так это отобразить, скажем, 20 последних записей из этих таблиц в div.
Вот моя первая таблица — audio1
userID folder title date
две другие папки выглядят точно так же
audio2
userID folder title date
audio3
userID folder title date
Как я могу получить данные из всех таблиц одновременно и отобразить их один за другим в div, упорядоченный по дате с помощью PHP?
Комментарии:
1. У вас возникли проблемы с запросом, HTML-макетом или php? Пожалуйста, будьте конкретны в своем вопросе.
2. HTML — это не проблема, только запрос к базе данных, с php тоже все в порядке, я просто не знаю, как извлекать информацию из трех таблиц одновременно 🙂
Ответ №1:
SELECT userID, folder, title, date
FROM audio1
UNION ALL
SELECT userID, folder, title, date
FROM audio2
UNION ALL
SELECT userID, folder, title, date
FROM audio3
ORDER BY date DESC LIMIT 20;
Комментарии:
1. Может ли анонимный даунвотер объяснить свое возражение?
2. Кто-то появляется точно в срок, и все получают отрицательный результат… Я не называю имена, но шаблон имеет много прецедентов в PHP и MySQL 🙂
3. @Michael: Итак, если бы я заметил, что понижение произошло в 13:57:41Z, я мог бы, теоретически, поискать другие действия по этому вопросу примерно в то же время? 🙂
4. Это хороший научный подход, да. 🙂
Ответ №2:
Ваш SQL-запрос будет состоять из 3 частей UNION
. UNION
Запрос объединяет результаты из нескольких таблиц с (обычно) похожими структурами, когда JOIN
связь не нужна, а вам просто нужно возвращать строки из нескольких таблиц.
$sql = "SELECT userID, folder, title, date FROM audio1
UNION ALL
SELECT userID, folder, title, date FROM audio2
UNION ALL
SELECT userID, folder, title, date FROM audio3
LIMIT 20;";
$result = mysql_query($sql);
if ($result) {
// Fetch results and echo them into a list.
}
Вам понадобится столбец для ORDER BY
. Скорее всего, так и будет date
, но у вас могут быть другие планы. Добавьте ORDER BY
предложение перед LIMIT 20
.
Ответ №3:
похоже, что ваша настройка базы данных неверна, и у вас должна быть только одна таблица с именем ‘audio’, поле которой представляет число, которое вы в данный момент используете в имени таблицы.
Ответ №4:
Вы можете попробовать объединение, или вы можете попробовать объединение.
SELECT
COALESCE(t1.userID, t2.userID, t3.userID) as userID
, t1.folder, t1.title, t1.date
, t2.folder, t2.title, t2.date
, t3.folder, t3.title, t3.date
FROM table1 t1
FULL OUTER JOIN table2 t2 ON (t1.userID = t2.userID)
FULL OUTER JOIN table3 t3 ON (t1.userID = t3.userID)
Это совсем другой зверь, поэтому я подумал, что дам вам возможность.