Получение результатов из нескольких строк с одинаковыми именами

#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)  
  

Это совсем другой зверь, поэтому я подумал, что дам вам возможность.