Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: MySQL: выборка из нескольких таблиц с перекрытием
 
 автор: halsoft   (09.12.2011 в 22:55)   письмо автору
 
 

Здравствуйте!

Никак не могу найти подходящий мануал по возникшей у меня проблеме.

Есть у меня 6 таблиц и там колонки, к примеру,

id | name | time

Мне нужно сделать выборку из всех этих таблиц,

что-то вроде $sql = " select id, name, time from table1, table2, table3 ... table6 order by time desc limit 5";

Вот примерный PHP код для вывода
<?
whilte
($massive mysql_fetch_array($sql)) 

echo 
'<a href="info.php?id='.$massive[id].'">'.$massive[id].'</a><br/>';

?>


Возникает 2 вопроса:

1. Как правильно сделать запрос в БД, чтоб она выбрала значения из 6 таблиц и упорядочила их по колонке time
2. вытекает из первого - как в полученный массив добавить название каждой таблицы, ну например если мы берем id, name и time, то к ним доступ будет как $massive[id] и т.д., а как получить $massive[table_name]?

Надеюсь, доступно объяснил суть проблемы.

  Ответить  
 
 автор: cheops   (09.12.2011 в 23:24)   письмо автору
 
   для: halsoft   (09.12.2011 в 22:55)
 

А как таблицы связаны друг с другом? Для одинаковых объектов одинаковые id или time? Т.е. как узнать, что запись из таблицы table1 с таким-то id соответствует записи из таблицы table3 с таким-то id.

  Ответить  
 
 автор: halsoft   (10.12.2011 в 13:41)   письмо автору
 
   для: cheops   (09.12.2011 в 23:24)
 

В том то и дело, что они не связаны друг с другом. Мне надо, чтобы скрипт выбрал из всех этих 6 таблиц 5 последних записей, не из каждой таблицы по пять, а в общем.

К примеру, скрипт выдал результат

id = 11 | name = Andrey | time = 190234234 - это из базы table1
id = 56 | name = Maxim | time = 190234230 - это из базы table1
id = 34 | name = Oleg | time = 190234228 - из table3
id = 100 | name = Alex | time = 190234221 - из table2
id = 12 | name = Vladimir | time = 190234219 - из table5

Поэтому мне нужно, чтобы в каждом возвращаемом массиве massive содержалось помимо id, name, time еще и table_name, чтобы определить из какой базы запись.

Это возможно?

Или мне надо сделать 6 отдельных запросов в каждую базу, чтоб каждый запрос возвращал по 5 значений, собрать из этого массив $massive (получается в нем будет содержаться 30 элементов), потом отсортировать его и взять из него 5 последних записей? Не много ресурсов будет жрать?

  Ответить  
 
 автор: cheops   (10.12.2011 в 14:47)   письмо автору
 
   для: halsoft   (10.12.2011 в 13:41)
 

>Или мне надо сделать 6 отдельных запросов в каждую базу, чтоб каждый запрос возвращал по 5
>значений
Вы знаете, можно, вероятно это и в один запрос уместить, но выгоды будет не много - работа будет проделана та же, а запрос будет довольно монструозным. Посмотрите соседнюю тему Объединить три SQL-запроса в один, в ней как раз решается схожая задача. Если настаиваете на одном запросе, можно будет попробовать его составить (но большой выгоды вряд ли стоит ожидать).

  Ответить  
 
 автор: halsoft   (10.12.2011 в 16:55)   письмо автору
 
   для: cheops   (10.12.2011 в 14:47)
 

Я подумал и пришёл к выводу, что лучше создать отдельную таблицу, куда будут заноситься 5 последних записей, таблица-копилка как бы, которая будет пополняться при добавлении данных в те 6 таблиц.

Не лучше ли? :)

  Ответить  
 
 автор: SerG7   (10.12.2011 в 16:10)   письмо автору
143.9 Кб
 
   для: halsoft   (10.12.2011 в 13:41)
 

Смотри схему

  Ответить  
 
 автор: cheops   (10.12.2011 в 16:14)   письмо автору
 
   для: SerG7   (10.12.2011 в 16:10)
 

Хм... а где схему взяли? Её можно выложить куда-нибудь на сайте, чтобы сослаться? Или лучше перерисовать?

  Ответить  
 
 автор: SerG7   (10.12.2011 в 16:28)   письмо автору
 
   для: cheops   (10.12.2011 в 16:14)
 

Не помню где ..конечно.... даже нужно....

  Ответить  
 
 автор: halsoft   (10.12.2011 в 16:56)   письмо автору
 
   для: SerG7   (10.12.2011 в 16:10)
 

Вам отдельное спасибо за схему, она многое проясняет!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования