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

Форум MySQL

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

 

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

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

тема: Множество параметров
 
 автор: Gendalf   (13.02.2010 в 17:53)   письмо автору
 
 

У меня есть такой запрос

SELECT 
    id AS ARRAY_KEY, table.* 
FROM table
WHERE
    AND (col1 = 'all' OR col1 LIKE '%|1|%') 
    AND (col2 = 'all' OR col2 LIKE '%|2|%')
    AND (col3 = 'all' OR col3 LIKE '%|7|%' OR col3 LIKE '%|8|%' OR col3 LIKE '%|3|%')
    AND id_ads NOT IN(1,2,3)

В колонках col1 и col2 находятся списки ID строки типа
|1|2|7|6|7|
b по ним выполняется выбор. Вопрос можно ли как то по другому организовать структуру, потому что колонок на самом деле больше. Или возможна ли оптимизация. Потому что мне кажется, что не правильно я спроектировал.
Я думал над вариантом, что составить Для каждой колонки отдельную таблицу. Но тогда ведь в этом запросе много объеденений, и выиграю ли я при этом. Так как данный запрос выполняется очень часто.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 19:45)   письмо автору
 
   для: Gendalf   (13.02.2010 в 17:53)
 

Реализуется как отношение многие-ко-многим (many-to-many , M:N) через одну дополнительную таблицу связи.

таблица связи

  Ответить  
 
 автор: Gendalf   (13.02.2010 в 21:01)   письмо автору
 
   для: Trianon   (13.02.2010 в 19:45)
 

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

  Ответить  
 
 автор: Trianon   (13.02.2010 в 21:32)   письмо автору
 
   для: Gendalf   (13.02.2010 в 21:01)
 

linkTable(
main_table_object_id,
atribute_name_id,
attribute_value_id)

описываемый объект кодирован main_table_object_id,
имя доп колонки кодировано atribute_name_id,
значение доп колонки кодировано atribute_value_id

Всё.
4 таблицы, 3 поля в таблице связи.

  Ответить  
 
 автор: Gendalf   (13.02.2010 в 21:38)   письмо автору
 
   для: Trianon   (13.02.2010 в 21:32)
 

Выдержит ли сервер такой запрос с объединением таблиц, запрос будет выполнятся около миллиона раз в сутки. Записей правда в этой таблице будет максимум тысячи 3-4.

  Ответить  
 
 автор: Trianon   (13.02.2010 в 21:42)   письмо автору
 
   для: Gendalf   (13.02.2010 в 21:38)
 

Это вопрос к серверу.
Сомневаюсь, что с LIKE будет легче.

  Ответить  
Rambler's Top100
вверх

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