Mysql Как объединить три таблицы и вывести под одним полем?

Olga93

Новичок
Здравствуйте, у меня есть три таблицы с одинаковыми полями id, title, description, text, author. Таблицы называются data1, data2, data3. Чтобы получить данные я объединяю следующим образом.
PHP:
SELECT d1.title t1, d2.title t2, d3.title t3, d1.description des1, d2.description des2, d3.description des3 from data1 d1
  INNER JOIN data2 d2 ON d1.id = d2.id
  INNER JOIN data3 d3 ON d2.id = d3.id
В итоге при выводе информации нужно ссылаться на переменную указанную в запросе, например t1, t2, t3. Мне нужно вывести данные под одной переменной допусти title или description, например объединяю таблицы, потом через цикл прописываю $row[“title”] и все данные выводятся из трех таблиц. Как это можно сделать?
Не знаю наверное их как-то нужно сгруппировать и группе обозначить переменную, потом выводить.
Вот пример:
PHP:
$sql = "SELECT d1.title t1, d2.title t2, d3.title t3, d1.description des1, d2.description des2, d3.description des3 from data1 d1
  INNER JOIN data2 d2 ON d1.id = d2.id
  INNER JOIN data3 d3 ON d2.id = d3.id";
$res = mysql_query($sql);
while($row = mysql_fetch_array($res))
{
  echo $row["des3"]."<br>";
}
P.S.Использую по старинке mysql_query, для теста потом все это переведу в pdo.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
SELECT id, title, description, text, author FROM data1,data2,data3?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Был неправ, каюсь) UNION посмотрите
 

Valick

Новичок
Olga93, надо начать с того, что у вас не должно быть таблиц data1, data2, data3 с одинаковыми полями. Налицо не понимание принципов построения архитектуры БД.
 

Olga93

Новичок
Был неправ, каюсь) UNION посмотрите
Спасибо результат:
PHP:
$sql = "SELECT id, title, description, text, author FROM data1 UNION SELECT id, title, description, text, author FROM data2 UNION SELECT id, title, description, text, author FROM data3";

$res = mysql_query($sql);
while($row = mysql_fetch_array($res))
{
  echo $row["title"]."<br>";
}
 

Olga93

Новичок
надо начать с того, что у вас не должно быть таблиц data1, data2, data3 с одинаковыми полями. Налицо не понимание принципов построения архитектуры БД.
Это тестовый пример, он не будет использоваться в дальнейшем.
 

WMix

герр M:)ller
Партнер клуба
на самом деле не понятно что ты хочешь,
INNER JOIN data2 d2 ON d1.id = d2.id эта строчка подразумевает, что в 2х таблицах строка с одинаковым id существует, если нет то строчки не будет.
SELECT .... FROM data1 UNION SELECT .... FROM data2 эта же подразумевает, что только строки где все колонки совпадают сгруппируются а остальные вернутся построчно (результат может быть с тремя строками с одинаковыми id).
 

Olga93

Новичок
Моя итоговая цель перемещать данные и объеденить их. Сейчас подробно объясню. Выше написали, что у меня "нет понимания принципов построения архитектуры БД". На самом деле я эти таблиц не буду использовать. Вот что мне нужно.


У меня три таблицы с одинаковыми полями и разными данными (их очень много больше чем показано в примере ниже). При использовании UNION. Выводятся данные:

Таблица data1
Здесь статьи
Таблица data2
Здесь новости
Таблица data3.
Здесь фильмы

При объединении UNION я получаю.
Название1
Название2
Название3
Название4
Название5
Новость1
Новость2
Новость3
Новость4
Новость5
Фильмы1
Фильмы2
Фильмы3
Фильмы4
Фильмы5

Мне нужно их перемещать, чтобы получилось такая последовательность (по очереди).

Название1
Новость1
Фильмы1

Название2
Новость2
Фильмы2

Название3
Новость3
Фильмы3

Название4
Новость4
Фильмы4

Название5
Новость5
Фильмы5

Потом все это занести в базу данных, допустим в таблицу data, вот именно эта таблица и будет использоваться в дальнейшем.

Я решила сделать сначала общий вывод потом придумать как перемешать данные и занести результат в БД. Примерно так:

PHP:
$sql = "SELECT id, title, description, text, author FROM data1 UNION SELECT id, title, description, text, author FROM data2 UNION SELECT id, title, description, text, author FROM data3";

$res = mysql_query($sql);
while($row = mysql_fetch_array($res))
{
  $title = $row["title"];
  $desc = $row["description"];
  $text = $row["text"];
  $author = $row["author"];
  //ПРИДУМАТЬ КАК ПЕРЕМЕШАТЬ ДАННЫЕ

  mysql_query("INSERT data(title, description, text, author) VALUES ('$title', '$desc', '$text ','$author')");
}
 

Valick

Новичок
На самом деле я эти таблиц не буду использовать.
Зачем решать несуществующую задачу?
Я решила сделать сначала общий вывод потом придумать как перемешать данные и занести результат в БД.
Почему сназу нельзя нормально спросить?
Пишешь:
Имеются три таблицы с одинаковыми полями (не факт, что нормализованные), хочу объединить их в одну таблицу (а может и раскидать по необходимым таблицам в соответвии с законами нормализации).
Потом прикрепяешь дамп структуры таблиц, желательно вместе с данными, а еще лучще варишь песочницу (например https://www.mycompiler.io/new/sql)
где можно поиграться в своё удовольствие (савочек и ведёрко мы принесём с собой)
Это же не трудно.
 

WMix

герр M:)ller
Партнер клуба
SQL:
select * from (

    select d.*, (@n1 := @n1 + 1) as sort, 1 as type
    from data1 as d,  (select @n1 := 0) as n
    limit 10

    union all

    select  d.*, (@n2 := @n2 + 1) as sort, 2 as type
    from data2 as d,  (select @n2 := 0) as n
    limit 10

) as data
order by sort, type
 

miketomlin

Новичок
Статья1, новость1, фильм1 как-то связаны? Если это не список разнотипных сущностей, нужно использовать LEFT JOIN.
 

Olga93

Новичок
Статья1, новость1, фильм1 как-то связаны?
Нет не связаны, это данные из разных таблиц которое нужно объединить в одну таблицу под общие поля "title, description, author, text" и сделать так чтобы они чередовались.
 

AnrDaemon

Продвинутый новичок
Если они никак не связаны, объединять их в одну таблицу бессмысленно.
Если это данные одного типа, то почему они изначально не хранятся в одной таблице?

Давайте уже говорить предметно, а не как вы.
Что за данные, почему они в разных таблицах с одинаковой структурой?
 

Valick

Новичок
Если это данные одного типа, то почему они изначально не хранятся в одной таблице?
потому что с миру по нитке, тащим всё что плохо лежит...
сдаётся мне что Ольга, вовсе не Ольга, а Олег или Валера
просто подрядился на халтуру, но не вывозит
вот и ищет кто за паровоза прокатит
 

Olga93

Новичок
потому что с миру по нитке, тащим всё что плохо лежит...
сдаётся мне что Ольга, вовсе не Ольга, а Олег или Валера
просто подрядился на халтуру, но не вывозит
вот и ищет кто за паровоза прокатит
Совсем меня не знаете, а уже принялись меня судить, а ты кто такой есть. Никто не предполагает что возможно у меня три сайта, которые было принято решение объединить в один и перенаправить трафик. Ладно допустим никто ничего не знает, уже не важно с ответом мне помогли. Работает ПОСТ №11.

Спасибо за помощь WMix.

Теперь закроем эту тему.
 
Сверху