Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> несколько условий по одному столбцу 
:(
    Опции темы
obmor
Дата 5.10.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



есть две таблиц
1) имя | категория - одному имени может соответствовать несколько категорий
2) столбец категорий

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



заранее благодарен

Это сообщение отредактировал(а) obmor - 5.10.2008, 19:14
PM MAIL   Вверх
Akina
Дата 5.10.2008, 21:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Вопрос, похоже, понятен ТОЛЬКО Вам. Ибо структура таблиц противоречит вопросу.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
obmor
Дата 6.10.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



Попробую объяснить вербально, есть перечень книг и у каждая из которых принадлежит одной или нескольким категориям, необходимо выбрать те которые принадлежат одновременно всем тем категориям, которые выбрал пользователь. 

Категории выбранные пользователем представляются в виде таблицы состоящей из одного столбца
PM MAIL   Вверх
vladimir74
Дата 6.10.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



что то я ен понял, мне кажется это N-M связь и тут надо три таблицы...
или как у вас хранятся ID категорий к книгам?
--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
skyboy
Дата 6.10.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



Цитата(obmor @  6.10.2008,  18:06 Найти цитируемый пост)
состоящей из одного столбца 

ты под каждый выбор пользователя делаешь отдельную таблицу?
зачем?
предлагаю:
таблица рубрики_книг:
1) id книги(book_id)
2) id рубрики(category_id)
список id рубрик, выбранных пользователем, implode'им в одну строку, с разделением запятой(например, "1,55,32,65,45"). назовем это пааметром categories_list
количество выбранных категорий назовем параметром categories_count.
тогда запрос будет выглядеть так:
Код

SELECT book_id, count(categoriy_id)
FROM books_categories
WHERE category_id in <categories_list>
GROUP BY book_id
HAVING count(category_id) = <categories_count>

естественно, categories_list и categories_count вставляются в запрос до его выполнения средствами клиентского языка прогрммирования.
PM MAIL   Вверх
vladimir74
Дата 6.10.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



Цитата(skyboy @  6.10.2008,  17:21 Найти цитируемый пост)
список id рубрик, выбранных пользователем, implode'им в одну строку, с разделением запятой(например, "1,55,32,65,45"). назовем это пааметром

это же против второго закона нормализации БД!!! (или даже первого)
нее тут ИМХО надо делать по человечески  3 таблицы (на самом деле их там больше, но нас будут волновать только три)
книги
ID, name, ............
категории
ID, name,......
связная
cat_ud, book_id

тогда можно будет делать выборку книг что то типа
Код

select * from book
where book.id in (select distinct book_id from cartbook 
                            where cat_id {список категорий из программы через AND!!!?!??!}
)

что то в этом роде.  что то я призабыл!! надо посмотреть а то через and как то глупо решать. Но идти надо ИМХО по этому пути 
--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
skyboy
Дата 6.10.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



Цитата(vladimir74 @  6.10.2008,  18:47 Найти цитируемый пост)
это же против второго закона нормализации БД!!! (или даже первого)

аааа... т.е. как эт конструкция
Код

where field in (1,2,10,11)

против "законов нормализации"?  smile  smile

Добавлено через 47 секунд
нормализация касается сугубо структуры хранилища данных. к логике построения запроса не имеет никакого отношения.
PM MAIL   Вверх
obmor
Дата 6.10.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



Уважаемый vladimir74, на самом деле хранение данных реализуется через 3 таблицы, рассматриваемая мной здесь это результат их соединения. А для выбранных юзером категорий применяется одна таблица, она с каждым новым запросом предварительно очищается.

Предложенный вами вариант подходит если необходимо выбрать те книги в которых встречается хоть одна категория. 



Уважаемый skyboy, ваши предложения очень интересны, я их завтра попробую реализовать.











Спасибо вам за помощ, премного благодарен
PM MAIL   Вверх
skyboy
Дата 7.10.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



Цитата(obmor @  6.10.2008,  21:36 Найти цитируемый пост)
она с каждым новым запросом предварительно очищается

нельзя так делать. я бы понял ещё, если бы создавалась temporary table, что гарантировало бы уникальность данных для каждого отдельного подключения, но одна постоянная таблица на всех... тебе надо либо делать lock на эту таблицу во время работы с ней одного из пользователей, либо уповать на то, что пользователи не сильно расстроятся, когда увидят в результатах поиска "немного не то". впрочем, может, я излишне пессимистичен?
PM MAIL   Вверх
vladimir74
Дата 7.10.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



Цитата(skyboy @  6.10.2008,  17:21 Найти цитируемый пост)
список id рубрик, выбранных пользователем, implode'им в одну строку

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

Цитата(obmor @  6.10.2008,  20:36 Найти цитируемый пост)
А для выбранных юзером категорий применяется одна таблица, она с каждым новым запросом предварительно очищается.

вот теперь я точно не совсем понял структуру.....



--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
obmor
Дата 7.10.2008, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



skyboy, спасибо тебе за совет, запрос получился как нельзя лучше.
 А насчет промежуточной таблицы я подумаю, действительно не не учел эту проблему
PM MAIL   Вверх
skyboy
Дата 7.10.2008, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



obmor, на форуме принято:если проблема решена и на вопрос актуальный(е) получен(ы)  ответ(ы), то тема помечается решенной. чтоб это сделать, автор темы(в данном случае - ты) кликает по ссылке "пометить как решенный" справа вверху оносительно первого сообщения темы.  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.