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

Форум MySQL

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

 

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

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

тема: уникальные значения
 
 автор: elenaki   (28.11.2005 в 16:08)   письмо автору
 
 

если у меня в ячейке таблицы строка типа "11,12,12", могу ли я из нее вытащить только
уникальные значения (чтобы не повторялось два раза 12)? или надо делить строку по запятой и в цикле проверять каждое значение, не равно ли оно предыдущему? значения там могут быть только по возрастающей, 12 не может встать перед 11.

==============
вопрос снят. решился по-другому

   
 
 автор: denvor   (28.11.2005 в 16:15)   письмо автору
 
   для: elenaki   (28.11.2005 в 16:08)
 

нам интересен не только вопрос, но и решение, найденное Вами :)

   
 
 автор: elenaki   (28.11.2005 в 16:58)   письмо автору
 
   для: denvor   (28.11.2005 в 16:15)
 

я завтра напишу. с примерами. пока проблема окончательно не решилась. но завтра решится :)

   
 
 автор: cheops   (28.11.2005 в 20:06)   письмо автору
 
   для: denvor   (28.11.2005 в 16:15)
 

Да эту проблему можно решить либо при помощи ключевого слова DISTINCT
SELECT DISTINCT id FROM tbl

либо группировкой по данному полю
SELECT * FORM tbl GROUP BY id

http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=6342
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=4908
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=2324
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=911

   
 
 автор: elenaki   (29.11.2005 в 10:28)   письмо автору
 
   для: cheops   (28.11.2005 в 20:06)
 

а DISTINCT разве не выбирает уникальные значения среди ВСЕХ строк?
мне же надо из конкретной ячейки выбрать уникальные значения...

задача:
есть список услуг, предоставляемых либо по всей стране, либо в определенной области,
либо в определенных районах одной или нескольких областей. страна, понятно, одна.
областей 13, районов - 51. области забиты в таблицу с полями - id, name, районы - в другую
таблицу с полями - id, name, id_peri (указан id области, в которую входит район). в третьей
таблице забиты услуги, там куча полей, которые нам сейчас неинтересны. есть два поля
для id области и id района. если там стоит -2, значит, услуга действует по всей стране.
если стоит положительное число в поле id_ области и -1 в поле id_ района, это значит, что
услуга действует по всей области. если стоит положительное число в поле id_ района, это
значит, что услуга действует только в районе. так у меня раньше было.


потом обнаружилось, что услуга может действовать в нескольких районах. пока эти районы
были из одной области, я записывала их id через запятую, потом делила строку, делала
запрос на название района и выводила названия в цикле. но вверху надо было вывести еще
и название области. я его брала из столбца id_ области таблицы услуг, делала запрос к таблице областей, чтобы получить ее имя по id.
а потом обнаружилось, что услуга может действовать в нескольких районах из разных областей, да еще вдобавок и какой-то области целиком. вот тут я застопорилась. если у меня задействована целая область, в поле id_ района надо ставить -1, но мне туда нужно записать еще и id других районов, а в поле id_ области - номера областей, к которым они относятся.

решила так:
1. если действует по всей стране - пишу -2 в поле id_ области и ничего в поле id_ района.
2. если действует в области (одной или нескольких) целиком - пишу id_ области (через запятую, если их несколько) в поле id_ области и ничего в поле id_ района.
3. если действует только в районах и ни в одной области целиком - пишу номера районов (через запятую) в поле id_ района и ничего в поле id_oblasti.
4. если действует в нескольких областях и/или в нескольких районах из разных областей - пишу в поле id_ области номера областей (через запятую), а в поле id_ района - номера районов.

тогда при выводе:
1. если -2 - то по всей стране.
2. если >0 в поле id_ области - то по всей/всем области/областям
3. если >0 в поле id_ района - то по районам (а название областей, к которым они относятся,
надо вытащить по отдельному запросу из таблицы областей).

вот тут опять заминка - теперь в таблице услуг у меня нет id области, есть только id района.
по нему я делаю запрос к таблице районов, вытаскиваю id области и по этому id_ области надо вытащить название области из таблицы областей. получается 2 запроса (а с тем, который выбирает услугу - три). не слишком ли много? все ведь делается в цикле. записей немного, в таблице услуг - около 200, областей - 13, районов - 51. услуг, которые предоставляются по разным районам из разных областей - штук 50.

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

   
 
 автор: cheops   (29.11.2005 в 12:53)   письмо автору
 
   для: elenaki   (29.11.2005 в 10:28)
 

Сильно не должен, особенно если рост числа записей будет незначительным... В любом случае будет проще проиндексировать столбцы (увеличить объём базы данных), чем реорганизовывать код.

   
Rambler's Top100
вверх

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