|
|
|
| интересует такой вопрос, и как он вообще правильно должен решатся. Имеется таблица GEO такой структурой - один ко дному
id | parent | name
в которой будет хранится список Стран, Регионов, Городов, наверняка список будет достаточно большим, думаю около 50 тыс. записей.
Есть ещё одна таблица, data для хранения допустим объявлений
структура такая
id | title | text | city_id
поле city_id будет хранить ID города из таблицы GEO.
Так вот, в чём вопрос, как правильно будет доставать названия города так чтобы была как меньше нагрузка на сервер, если допустим применять такой запрос
тоесть подключатся сразу к двум таблицам, не будет ли нагружать сервер? или есть какойто другой вариант для этого, как вообще это делают многие?
каждому объявлению чтобы можно было подставлять названия городов например так
Страна / Регион / Город
или так
Город
тоесть просто название города, либо всю цепочку от страны до города | |
|
|
|
|
|
|
|
для: web777
(26.09.2008 в 17:41)
| | >Так вот, в чём вопрос, как правильно будет доставать названия города так чтобы была как меньше нагрузка на сервер, если допустим применять такой запрос
>
>
>
>тоесть подключатся сразу к двум таблицам, не будет ли нагружать сервер?
ваш запрос никоим случаем сервер не нагрузит. :-). Вы его хоть проверяли? :-) | |
|
|
|
|
|
|
|
для: Root
(27.09.2008 в 00:05)
| | А Вы? :) | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: Root
(27.09.2008 в 01:56)
| | Я имею ввиду саму логику, а не синтаксис. | |
|
|
|
|
|
|
|
для: 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
правильно ли использовать такую логику или есть какойто дугой лутше этого? | |
|
|
|
|
|
|
|
для: web777
(27.09.2008 в 20:49)
| | >всё верно, вопрос относился к логике, как должно реализоваться.
>если уж на то пошло, то запрос должен примерно выглядеть таким образом....
за исключением одной строки. Вот этой:
> FROM data,geo
Это неправильная строка. | |
|
|
|
|
|
|
|
для: Trianon
(27.09.2008 в 21:06)
| | извиняюсь, допустил ошибку.
select
data.id,
data.title,
data.text,
data.city_id,
geo.name as city_name
FROM data
|
но не в синтаксисе проблема, меня больше интересует сама логика, какой правильный вариант - доставать названия города, тот вариант что я привел или может есть какойто ещё? | |
|
|
|
|
|
|
|
для: web777
(28.09.2008 в 13:19)
| | >но не в синтаксисе проблема, меня больше интересует сама логика, какой правильный вариант - доставать названия города, тот вариант что я привел или может есть какойто ещё?
Вы пытаетесь проверять свои варианты?
Пока что ни одного правильного Вы не написали.
В последнем случае - откуда возьмется поле geo.name ? | |
|
|
|
|
|
|
|
для: Trianon
(27.09.2008 в 21:06)
| | Вопрос не по теме:
Trianon, какую книгу вы бы посоветовали для детального изучения SQL. | |
|
|
|
|
|
|
|
для: mihdan
(28.09.2008 в 14:28)
| | Даже не знаю, что и ответить...
Для начала предложил бы "SQL, Руководство по изучению языка", Крис Фиайли.
А чтоб для детального... затрудняюсь с советом. | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2008 в 20:21)
| | Неплохое руководство, спасибо | |
|
|
|
|
|
|
|
для: mihdan
(28.09.2008 в 14:28)
| | Если честно, действительно что-то не наблюдается сейчас на рынке детальных книг по чистому SQL (тем более описывающих последние стандарты). Более или менее детальное описание видел лет пять назад. Больше выпускают книги по конкретным СУБД, вероятно из-за того, что на них больший спрос. | |
|
|
|
|
|
|
|
для: 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 постоянно, а заранее один раз сформировать массив со всеми городами,регионами, странами, и уже непосредственно с массива выбирать название города.
Из всех трёх перечисленных вариантов по мне больше подходит первый вариант, но я незнаю, может помимо этих есть ещё какойто другой вариант ещё лучше чем эти, да и как вообще все делают? | |
|
|
|
|
|
|
|
для: web777
(29.09.2008 в 12:49)
| | Первый и есть правильный.
Насчет третьего - метод применяется, когда формируемый массив невелик сам по себе. Как я понимаю, это не Ваш случай. | |
|
|
|
|
|
|
|
для: Trianon
(29.09.2008 в 13:41)
| | ну тогда я спокоен, просто думал что есть ещё другие варианты, по лучше, но по скольку первый вариант является таким, то я его тогда и буду продолжать использовать.
насчёт третьего варианта, всё верно, использовать в данном случаи было бы не правильно, слишком большой массив получился бы, другое дело еслибы массив ограничивался всего несколькими записями. | |
|
|
|
|
|
|
|
для: cheops
(29.09.2008 в 00:46)
| | Спасибо. А например по MySQL? | |
|
|
|
|
|
|
|
для: mihdan
(29.09.2008 в 18:49)
| | Возможно вас заинтересует наша книга "MySQL 5. В подлиннике". | |
|
|
|