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

Форум MySQL

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

 

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

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

тема: Два запроса из одной таблицы
 
 автор: Ильдар   (10.05.2011 в 12:02)   письмо автору
 
 

По поиску не знал как искать, ничего путного не нашел.
Вот думаю над тем как сделать два запроса из одной таблицы.
Имеется таблица БД 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'ом это будет намного быстрей.

  Ответить  
 
 автор: cheops   (10.05.2011 в 13:08)   письмо автору
 
   для: Ильдар   (10.05.2011 в 12:02)
 

Пока не очень понятно, почему нельзя просто выполнить запрос
SELECT id_city, id_region FROM population
Какой ответ нужен от базы данных (может удобнее будет разобрать задачу на конкретном примере городов и регионов)?

  Ответить  
 
 автор: Ильдар   (10.05.2011 в 13:17)   письмо автору
 
   для: cheops   (10.05.2011 в 13:08)
 

Вот смотрите, содержание полей такое:
id_region | id _city  | name
1            0           Респ. Адыгея
2            0           Респ. Башкортостан
3            0           Респ. Бурятия
1            1           г. Адыгейск
2            2           г. Агидель



Нужно извлечь одним запросом данные: "г. Агидель, Респ. Башкортостан" или "Респ. Башкортостан, г. Агидель"

  Ответить  
 
 автор: Lotanaen   (10.05.2011 в 13:45)   письмо автору
 
   для: Ильдар   (10.05.2011 в 13:17)
 

может быть так?

SELECT id_city, id_region FROM population ORDER BY id_region, id_sity

и уже при обработке результатов запроса получать по очереди айди

  Ответить  
 
 автор: Ильдар   (10.05.2011 в 13:47)   письмо автору
 
   для: Lotanaen   (10.05.2011 в 13:45)
 

В том то и проблема, что нужно все в одном запросе сделать, чтобы из базы уже получить готовую инфу, а не после 2-3 запросов из БД формировать потом в php. Это долго.
Тогда думаю лучше сделать деление на таблицы и работать в JOIN

  Ответить  
 
 автор: Lotanaen   (10.05.2011 в 14:01)   письмо автору
 
   для: Ильдар   (10.05.2011 в 13:47)
 

можно и две таблицы сделать, а в моем примере запрос один делается, только потом результат запроса чуток обработать нужно будет в цикле...

  Ответить  
 
 автор: cheops   (10.05.2011 в 14:03)   письмо автору
 
   для: Ильдар   (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

  Ответить  
 
 автор: Ильдар   (10.05.2011 в 14:12)   письмо автору
 
   для: cheops   (10.05.2011 в 14:03)
 

Вот! Я подозревал что усществует самообъединение таблицы.

А как насчет влияния на производительность? Отличия есть от объединения двух разных таблиц?

  Ответить  
 
 автор: cheops   (10.05.2011 в 14:16)   письмо автору
 
   для: Ильдар   (10.05.2011 в 14:12)
 

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

  Ответить  
 
 автор: Ильдар   (10.05.2011 в 14:18)   письмо автору
 
   для: cheops   (10.05.2011 в 14:16)
 

отлично! спасибо огромное. теперь приступлю к исполнению

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

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