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

Форум MySQL

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

 

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

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

тема: Как правильно получать названия городов из другой таблици?
 
 автор: web777   (26.09.2008 в 17:41)   письмо автору
 
 

интересует такой вопрос, и как он вообще правильно должен решатся. Имеется таблица GEO такой структурой - один ко дному

id | parent | name

в которой будет хранится список Стран, Регионов, Городов, наверняка список будет достаточно большим, думаю около 50 тыс. записей.

Есть ещё одна таблица, data для хранения допустим объявлений

структура такая

id | title | text | city_id

поле city_id будет хранить ID города из таблицы GEO.

Так вот, в чём вопрос, как правильно будет доставать названия города так чтобы была как меньше нагрузка на сервер, если допустим применять такой запрос

select * table,table2


тоесть подключатся сразу к двум таблицам, не будет ли нагружать сервер? или есть какойто другой вариант для этого, как вообще это делают многие?

каждому объявлению чтобы можно было подставлять названия городов например так
Страна / Регион / Город
или так
Город

тоесть просто название города, либо всю цепочку от страны до города

  Ответить  
 
 автор: Root   (27.09.2008 в 00:05)   письмо автору
 
   для: web777   (26.09.2008 в 17:41)
 

>Так вот, в чём вопрос, как правильно будет доставать названия города так чтобы была как меньше нагрузка на сервер, если допустим применять такой запрос
>
>
select * table,table2

>
>тоесть подключатся сразу к двум таблицам, не будет ли нагружать сервер?

ваш запрос никоим случаем сервер не нагрузит. :-). Вы его хоть проверяли? :-)

  Ответить  
 
 автор: BinLaden   (27.09.2008 в 00:21)   письмо автору
 
   для: Root   (27.09.2008 в 00:05)
 

А Вы? :)

  Ответить  
 
 автор: Root   (27.09.2008 в 01:56)   письмо автору
 
   для: BinLaden   (27.09.2008 в 00:21)
 

>А Вы? :)
нет :-)
но если уж Вам интерестно:
You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use 
near 'table,table2' at line 1

  Ответить  
 
 автор: BinLaden   (27.09.2008 в 11:44)   письмо автору
 
   для: Root   (27.09.2008 в 01:56)
 

Я имею ввиду саму логику, а не синтаксис.

  Ответить  
 
 автор: web777   (27.09.2008 в 20:49)   письмо автору
 
   для: BinLaden   (27.09.2008 в 11:44)
 

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


select
data.id,
data.title,
data.text,
data.city_id,

geo.name as city_name

FROM data,geo


так вот, правильно ли будет, если применять такой запрос?

уточню что нам нужно вывести объявления, при этом каждой записи(объявления) выводить название города, из примера видно что город выводится через новое поле city_name

правильно ли использовать такую логику или есть какойто дугой лутше этого?

  Ответить  
 
 автор: Trianon   (27.09.2008 в 21:06)   письмо автору
 
   для: web777   (27.09.2008 в 20:49)
 

>всё верно, вопрос относился к логике, как должно реализоваться.
>если уж на то пошло, то запрос должен примерно выглядеть таким образом....

за исключением одной строки. Вот этой:

> FROM data,geo

Это неправильная строка.

  Ответить  
 
 автор: web777   (28.09.2008 в 13:19)   письмо автору
 
   для: Trianon   (27.09.2008 в 21:06)
 

извиняюсь, допустил ошибку.


select
data.id,
data.title,
data.text,
data.city_id,

geo.name as city_name

FROM data


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

  Ответить  
 
 автор: Trianon   (28.09.2008 в 13:42)   письмо автору
 
   для: web777   (28.09.2008 в 13:19)
 

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

Вы пытаетесь проверять свои варианты?
Пока что ни одного правильного Вы не написали.
В последнем случае - откуда возьмется поле geo.name ?

  Ответить  
 
 автор: mihdan   (28.09.2008 в 14:28)   письмо автору
 
   для: Trianon   (27.09.2008 в 21:06)
 

Вопрос не по теме:

Trianon, какую книгу вы бы посоветовали для детального изучения SQL.

  Ответить  
 
 автор: Trianon   (28.09.2008 в 20:21)   письмо автору
 
   для: mihdan   (28.09.2008 в 14:28)
 

Даже не знаю, что и ответить...
Для начала предложил бы "SQL, Руководство по изучению языка", Крис Фиайли.
А чтоб для детального... затрудняюсь с советом.

  Ответить  
 
 автор: mihdan   (29.09.2008 в 18:50)   письмо автору
 
   для: Trianon   (28.09.2008 в 20:21)
 

Неплохое руководство, спасибо

  Ответить  
 
 автор: cheops   (29.09.2008 в 00:46)   письмо автору
 
   для: mihdan   (28.09.2008 в 14:28)
 

Если честно, действительно что-то не наблюдается сейчас на рынке детальных книг по чистому SQL (тем более описывающих последние стандарты). Более или менее детальное описание видел лет пять назад. Больше выпускают книги по конкретным СУБД, вероятно из-за того, что на них больший спрос.

  Ответить  
 
 автор: web777   (29.09.2008 в 12:49)   письмо автору
 
   для: cheops   (29.09.2008 в 00:46)
 

хорошо, я признаю что в SQL не такой асс, и я допустил ошибку, сейчас переписал заново создал базу чтобы на ней проверить, всё работает, вот работающий пример


 SELECT

 data.id,
 data.title,
 data.text,
 data.city_id,

 geo.name AS city_name

 FROM data LEFT JOIN geo ON data.city_id = geo.id


Напомню имеются две таблици


Таблица городов, стран и регионов
GEO
id | parent | name


Таблица данных, к примеру объявлений
Data
id | title | text | city_id

поле city_id будет хранить ID города из таблицы GEO.

Вообще есть три варианта о которых я знаю, первый вариант это выше написанный, второй вариант, написать отдельную функцию get_city() которая будет делать один запрос к таблице GEO для выбора города, и при запросе при запросе


 SELECT

 data.id,
 data.title,
 data.text,
 data.city_id

 FROM data


выводить таким образом get_city($row['city_id']) но этот вариант я думаю совсем не подходит, т.к число запросов равняется числу записей выводимых из таблицы Data.

И третьий вариант, примерно тоже самое как и второй вариант только уже не обращаться к таблице GEO постоянно, а заранее один раз сформировать массив со всеми городами,регионами, странами, и уже непосредственно с массива выбирать название города.

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

  Ответить  
 
 автор: Trianon   (29.09.2008 в 13:41)   письмо автору
 
   для: web777   (29.09.2008 в 12:49)
 

Первый и есть правильный.
Насчет третьего - метод применяется, когда формируемый массив невелик сам по себе. Как я понимаю, это не Ваш случай.

  Ответить  
 
 автор: web777   (29.09.2008 в 13:48)   письмо автору
 
   для: Trianon   (29.09.2008 в 13:41)
 

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

насчёт третьего варианта, всё верно, использовать в данном случаи было бы не правильно, слишком большой массив получился бы, другое дело еслибы массив ограничивался всего несколькими записями.

  Ответить  
 
 автор: mihdan   (29.09.2008 в 18:49)   письмо автору
 
   для: cheops   (29.09.2008 в 00:46)
 

Спасибо. А например по MySQL?

  Ответить  
 
 автор: cheops   (30.09.2008 в 01:11)   письмо автору
 
   для: mihdan   (29.09.2008 в 18:49)
 

Возможно вас заинтересует наша книга "MySQL 5. В подлиннике".

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

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