|
|
|
| Здравствуйте!
Никак не могу найти подходящий мануал по возникшей у меня проблеме.
Есть у меня 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]?
Надеюсь, доступно объяснил суть проблемы. | |
|
|
|
|
|
|
|
для: halsoft
(09.12.2011 в 22:55)
| | А как таблицы связаны друг с другом? Для одинаковых объектов одинаковые id или time? Т.е. как узнать, что запись из таблицы table1 с таким-то id соответствует записи из таблицы table3 с таким-то id. | |
|
|
|
|
|
|
|
для: 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 последних записей? Не много ресурсов будет жрать? | |
|
|
|
|
|
|
|
для: halsoft
(10.12.2011 в 13:41)
| | >Или мне надо сделать 6 отдельных запросов в каждую базу, чтоб каждый запрос возвращал по 5
>значений
Вы знаете, можно, вероятно это и в один запрос уместить, но выгоды будет не много - работа будет проделана та же, а запрос будет довольно монструозным. Посмотрите соседнюю тему Объединить три SQL-запроса в один, в ней как раз решается схожая задача. Если настаиваете на одном запросе, можно будет попробовать его составить (но большой выгоды вряд ли стоит ожидать). | |
|
|
|
|
|
|
|
для: cheops
(10.12.2011 в 14:47)
| | Я подумал и пришёл к выводу, что лучше создать отдельную таблицу, куда будут заноситься 5 последних записей, таблица-копилка как бы, которая будет пополняться при добавлении данных в те 6 таблиц.
Не лучше ли? :) | |
|
|
|
|
 143.9 Кб |
|
|
для: halsoft
(10.12.2011 в 13:41)
| | Смотри схему | |
|
|
|
|
|
|
|
для: SerG7
(10.12.2011 в 16:10)
| | Хм... а где схему взяли? Её можно выложить куда-нибудь на сайте, чтобы сослаться? Или лучше перерисовать? | |
|
|
|
|
|
|
|
для: cheops
(10.12.2011 в 16:14)
| | Не помню где ..конечно.... даже нужно.... | |
|
|
|
|
|
|
|
для: SerG7
(10.12.2011 в 16:10)
| | Вам отдельное спасибо за схему, она многое проясняет! | |
|
|
|