|
|
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
В SQL не селен.Можно сказать начинающий. Прошу подсказать в какую сторону копать, возможно привести пример и стоит ли с этим связываться. Всю сложность своей задачи не объясняю. дано на примере Table_1 item_idfield_namevalue1'last_name'Титов'1'first_name''Андрей'1'category''autor'2'last_name''Сталин'2'first_name''Иосиф'2'category''history'3'last_name''Титов'3'first_name''Андрей'3'category''history' Задача такая - сделать выборку(поиск) к примеру по совпадению 'last_name'='Титов' AND 'first_name'='Андрей' . Представляю пока так 1 вариант: делаем запрос, ищем совпадение 'last_name'='Титов' OR 'first_name'='Андрей' а дальше путем переборки полученных данных, присваиваем массиву по ключу item_id, вложенный массив field_name=> value. и дальше фильтруем по совпадению AND. Но я вижу в этом большой недостаток - слишком много будет отобранных данных по запросу, что соответственно увеличит нагрузку на сервер. 2 вариант: делаем 1 запрос (соответственно столбцам field_name=value) 'last_name'='Титов' OR 'first_name'='Андрей' и создаем перекрестную таблицу по выбранному(путем перекрестного запроса) Table_2 item_idlast_namefirst_namecategory1'Титов' 'Андрей''history'3'Титов' 'Андрей''autor' И уже потом создаем запрос 'last_name'='Титов' AND 'first_name'='Андрей' к таблице Table_2. Также уточню - выборка может быть по трем значениям и более - field_name=value Вопросы: 1. Можно ли как нибудь сделать все в один запрос или проще ? 2. если нет то подскажите как сформировать запросы по 2 варианту и будет ли выгодно отличаться от первого варианта. На заметку - field_id - значения добавляются динамически по усмотрению администратора сайта! Моя цель в глобальном смысле искать совпадения в value во всех полях field_name... поэтому решил значение всех полей занести в один столбец и не создавать отдельную колонку для поля в основной таблице. и в будущем по необходимости проводить ограниченный поиск согласно совпадению по полям. Если скажите что такой результат ресурсоемкий - то возможно откажусь от такой идеи. Но все таки прошу ответить на поставленные вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2015, 23:35:53 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
AlexeyP0708, Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2015, 23:44:21 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
AlexeyP0708, по 1 варианту уточню чтоб понятней было массив сформируется так : array( '1'=>array( 'first_name'=>'Титов', 'last_name'=>'Андрей', 'category'=>'history'), '3'=>array( 'first_name'=>'Титов', 'last_name'=>'Андрей', 'category'=>'autor')) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2015, 23:47:37 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
having,, Спасибо. НЕ думал что будет все легко и просто! Как понял при having count(*)=2 будут выделятся только те строки которые есть 2 совпадения по item_id . Но почитал про having - было написано что при большом объеме данных могут быть жуткие тормоза.... ((( Возможно такое? Жалко только что при таком запросе будет вытаскиваться объем информации больше чем то необходимо! При структуре таблицы item_idfirst_namelast_namecategoryи тд... обработка была бы быстрей ((( Буду взвешивать за и против... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2015, 00:14:00 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
AlexeyP0708having,, Спасибо. НЕ думал что будет все легко и просто! Как понял при having count(*)=2 будут выделятся только те строки которые есть 2 совпадения по item_id . Но почитал про having - было написано что при большом объеме данных могут быть жуткие тормоза.... ((( Возможно такое? Жалко только что при таком запросе будет вытаскиваться объем информации больше чем то необходимо! При структуре таблицы item_idfirst_namelast_namecategoryи тд... обработка была бы быстрей ((( Буду взвешивать за и против...Не будет никакого "вытаскиваться объем информации больше чем то необходимо". Запрос ведь выполнится на сервере, а на клиент уйдёт только результат (вот тот список item_id). Запросы к EAV-у (это то, что у вас Table_1) конечно "потяжелее" будут, чем запросы к "нормальной" таблице (Table_2). Но тут нужно определятся: - или " field_id - значения добавляются динамически по усмотрению администратора сайта " и тогда EAV - чуть ли не единственный выход - или структура данных создаётся раз и навсегда в нормальной форме, но никаких "значения добавляются динамически" не будет, или это будет достаточно трудоёмкой задачей, и совсем не администратора, а разраба ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2015, 00:33:42 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
having,, ТО что клиент получит - это понятно! Просто время на обработку запроса уйдет больше(я так думаю). А не хотелось бы этим загружать сервер в случае большой посещаемости! После выборки по OR еще будет применено правило having count(*)=n где n- количество полей заданных для сравнения! Как он повлияет на процесс я вот и не в курсе! Даст ли дополнительную нагрузку! У меня модернизация проекта MVC. ТАм уже что надо реализовано. Реализую сейчас Возможность назначать Поля по Каталогам! Ток в основной таблице динамически создавались колонки для создаваемого поля. Фильтр для динамически добавляемых колонок которые являются полями статьи, реализовать не проблема. ТЕм более что по полям в каталогах ведется отдельная таблица. Но Подумал как то не культурно - и перенес поля в отдельную таблицу по типу item | field | value ... да и сначал решил что поиск по всем полям проще будет проводится в одной колонке. про EAV почитал - говорят производительность падает при большом объеме и сложном запросе(((. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2015, 03:07:28 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
хотя про having ступил. там же возможно счетчик будет вестись. А по счетчику потом будет сравнение и это времени много не займет. В любом случае спасибо за дельный совет. Оставлю в стиле EAV. все уже реализовано кроме фильтра по запросу field1=val AND field2 = val2. Но благодаря вам схема уже понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2015, 03:21:31 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
having,AlexeyP0708, Код: sql 1. 2. 3. 4. 5. 6. Опять в подвешенном состоянии.((( Если захочу сделать такой запрос ( last_name='Титов' OR first_name='Иосиф') AND category='history' пока логика где то теряется Есть какие нить варианты? пока в голову так приходит... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2015, 01:35:13 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
AlexeyP0708, ПОка такое в голову пришло но еще не тестил - не знаю как поведет себя. Кто подскажет сработает такая выборка под логику ( last_name='Титов' OR first_name='Иосиф') AND category='history' Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2015, 03:02:13 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
AlexeyP0708Опять в подвешенном состоянии.((( Если захочу сделать такой запрос ( last_name='Титов' OR first_name='Иосиф') AND category='history' что-то типа такого Код: sql 1. 2. 3. 4. 5. 6. 7. или так, что бы "единообразно" Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2015, 04:34:27 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
AlexeyP0708Если захочу сделать такой запрос ( last_name='Титов' OR first_name='Иосиф') AND category='history' Ненормализованное решение: Код: sql 1. 2. 3. 4. 5. Нормализованное решение - на базе WHERE EXISTS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2015, 09:20:49 |
|
||
|
выборка по двум и более параметрам в одном столбце
|
|||
|---|---|---|---|
|
#18+
[quot Akina]AlexeyP0708Если захочу сделать такой запрос Нормализованное решение - на базе WHERE EXISTS. Спасибо Хорошая подсказка. Как раз изначально что то подобия и искал. ИзНачально наверно надо было так вопрос и сформулировать - сделать подзапрос из запроса! ))) Про Having - все тоже грандиозно просто! Спасибо за оптимальные решения Спасибо Всем ваши варианты очень облегчают жизнь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2015, 12:12:05 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38905016&tid=1833438]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
104ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 443ms |

| 0 / 0 |
