![]() |
|
Модераторы: skyboy |
![]()
|
|
| obmor |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.6.2008 Репутация: нет Всего: нет |
есть две таблиц
1) имя | категория - одному имени может соответствовать несколько категорий 2) столбец категорий надо выбрать те строки из первой таблицы в которых есть все категории что и во второй заранее благодарен Это сообщение отредактировал(а) obmor - 5.10.2008, 19:14 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Вопрос, похоже, понятен ТОЛЬКО Вам. Ибо структура таблиц противоречит вопросу.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| obmor |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.6.2008 Репутация: нет Всего: нет |
Попробую объяснить вербально, есть перечень книг и у каждая из которых принадлежит одной или нескольким категориям, необходимо выбрать те которые принадлежат одновременно всем тем категориям, которые выбрал пользователь.
Категории выбранные пользователем представляются в виде таблицы состоящей из одного столбца |
|||
|
||||
| vladimir74 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 28.11.2006 Репутация: нет Всего: 3 |
что то я ен понял, мне кажется это N-M связь и тут надо три таблицы...
или как у вас хранятся ID категорий к книгам? --------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 15 Всего: 260 |
ты под каждый выбор пользователя делаешь отдельную таблицу? зачем? предлагаю: таблица рубрики_книг: 1) id книги(book_id) 2) id рубрики(category_id) список id рубрик, выбранных пользователем, implode'им в одну строку, с разделением запятой(например, "1,55,32,65,45"). назовем это пааметром categories_list количество выбранных категорий назовем параметром categories_count. тогда запрос будет выглядеть так:
естественно, categories_list и categories_count вставляются в запрос до его выполнения средствами клиентского языка прогрммирования. |
|||
|
||||
| vladimir74 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 28.11.2006 Репутация: нет Всего: 3 |
это же против второго закона нормализации БД!!! (или даже первого) нее тут ИМХО надо делать по человечески 3 таблицы (на самом деле их там больше, но нас будут волновать только три) книги ID, name, ............ категории ID, name,...... связная cat_ud, book_id тогда можно будет делать выборку книг что то типа
что то в этом роде. что то я призабыл!! надо посмотреть а то через and как то глупо решать. Но идти надо ИМХО по этому пути --------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ. |
||||
|
|||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 15 Всего: 260 |
аааа... т.е. как эт конструкция
против "законов нормализации"? Добавлено через 47 секунд нормализация касается сугубо структуры хранилища данных. к логике построения запроса не имеет никакого отношения. |
||||
|
|||||
| obmor |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.6.2008 Репутация: нет Всего: нет |
Уважаемый vladimir74, на самом деле хранение данных реализуется через 3 таблицы, рассматриваемая мной здесь это результат их соединения. А для выбранных юзером категорий применяется одна таблица, она с каждым новым запросом предварительно очищается.
Предложенный вами вариант подходит если необходимо выбрать те книги в которых встречается хоть одна категория. Уважаемый skyboy, ваши предложения очень интересны, я их завтра попробую реализовать. Спасибо вам за помощ, премного благодарен |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 15 Всего: 260 |
нельзя так делать. я бы понял ещё, если бы создавалась temporary table, что гарантировало бы уникальность данных для каждого отдельного подключения, но одна постоянная таблица на всех... тебе надо либо делать lock на эту таблицу во время работы с ней одного из пользователей, либо уповать на то, что пользователи не сильно расстроятся, когда увидят в результатах поиска "немного не то". впрочем, может, я излишне пессимистичен? |
|||
|
||||
| vladimir74 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 28.11.2006 Репутация: нет Всего: 3 |
извени, просто был вечер, и я понял так, что ты хочешь рубрики для книг заносить в одно поле через запятую
вот теперь я точно не совсем понял структуру..... --------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ. |
||||
|
|||||
| obmor |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.6.2008 Репутация: нет Всего: нет |
skyboy, спасибо тебе за совет, запрос получился как нельзя лучше.
А насчет промежуточной таблицы я подумаю, действительно не не учел эту проблему |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 15 Всего: 260 |
obmor, на форуме принято:если проблема решена и на вопрос актуальный(е) получен(ы) ответ(ы), то тема помечается решенной. чтоб это сделать, автор темы(в данном случае - ты) кликает по ссылке "пометить как решенный" справа вверху оносительно первого сообщения темы.
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |