|
|
|
| По поиску не знал как искать, ничего путного не нашел.
Вот думаю над тем как сделать два запроса из одной таблицы.
Имеется таблица БД population
id_region
id_city
name
Как сделать такой запрос, чтобы извлечь сначала id города id_city, а потом id_region в одонм запросе?
Пробовал вложенным запросом:
SELECT id_city, (SELECT id_region FROM population) FROM population
|
Но этот запрос слишком долгий, хоть и индексированы поля. Всего 200 000 полей у меня, запрос занимает 0,4 секунды. Думаю если разделить таблицу на две, то можно воспользоваться JOIN'ом это будет намного быстрей. | |
|
|
|
|
|
|
|
для: Ильдар
(10.05.2011 в 12:02)
| | Пока не очень понятно, почему нельзя просто выполнить запрос
SELECT id_city, id_region FROM population
| Какой ответ нужен от базы данных (может удобнее будет разобрать задачу на конкретном примере городов и регионов)? | |
|
|
|
|
|
|
|
для: cheops
(10.05.2011 в 13:08)
| | Вот смотрите, содержание полей такое:
id_region | id _city | name
1 0 Респ. Адыгея
2 0 Респ. Башкортостан
3 0 Респ. Бурятия
1 1 г. Адыгейск
2 2 г. Агидель
|
Нужно извлечь одним запросом данные: "г. Агидель, Респ. Башкортостан" или "Респ. Башкортостан, г. Агидель" | |
|
|
|
|
|
|
|
для: Ильдар
(10.05.2011 в 13:17)
| | может быть так?
SELECT id_city, id_region FROM population ORDER BY id_region, id_sity
|
и уже при обработке результатов запроса получать по очереди айди | |
|
|
|
|
|
|
|
для: Lotanaen
(10.05.2011 в 13:45)
| | В том то и проблема, что нужно все в одном запросе сделать, чтобы из базы уже получить готовую инфу, а не после 2-3 запросов из БД формировать потом в php. Это долго.
Тогда думаю лучше сделать деление на таблицы и работать в JOIN | |
|
|
|
|
|
|
|
для: Ильдар
(10.05.2011 в 13:47)
| | можно и две таблицы сделать, а в моем примере запрос один делается, только потом результат запроса чуток обработать нужно будет в цикле... | |
|
|
|
|
|
|
|
для: Ильдар
(10.05.2011 в 13:17)
| | В таких случаях обычно прибегают к самообъединению таблицы
SELECT
c.id_region AS id_region,
c.id_city AS id_city,
c.name AS city,
r.name AS region
FROM
population AS c
LEFT JOIN
population AS r
ON
c.id_region = r.id_region AND
c.id_city <> r.id_city
WHERE c.id_city <> 0
|
| |
|
|
|
|
|
|
|
для: cheops
(10.05.2011 в 14:03)
| | Вот! Я подозревал что усществует самообъединение таблицы.
А как насчет влияния на производительность? Отличия есть от объединения двух разных таблиц? | |
|
|
|
|
|
|
|
для: Ильдар
(10.05.2011 в 14:12)
| | В общем нет, если таблицы проиндексированы под этот запрос - будет примерно также как в случае обычного двухтабличного запроса. | |
|
|
|
|
|
|
|
для: cheops
(10.05.2011 в 14:16)
| | отлично! спасибо огромное. теперь приступлю к исполнению | |
|
|
|