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

Форум MySQL

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

 

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

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

тема: поиск в БД
 
 автор: moonfox   (10.04.2014 в 23:40)   письмо автору
 
 

есть поле со строкой содержащей id выбранных элементов
например 15-22-33-1-48-54-2
и есть массив этих id полученный из отмеченных checkbox
подскажите как лучше произвести запрос к БД чтобы выбрать те строки где в строке присутствуют эти id

то есть select * from ... where поле параметры содержит все id полученные из массива
спасибо.

  Ответить  
 
 автор: Igorek   (11.04.2014 в 10:07)   письмо автору
 
   для: moonfox   (10.04.2014 в 23:40)
 

Если я правильно понял, то имеем таблицу вроде такой:
ID  txt
----------------------
'1', '1-22-23-14-5'
'2', '1-22-23-42-55'
'3', '1-21-3-4-54'


массив ID полученных из отмеченных чекбоксов:
array(54, 42)


запрос:
SELECT *
FROM table_name
WHERE
    FIND_IN_SET('54', REPLACE(txt, '-', ','))
 OR FIND_IN_SET('42', REPLACE(txt, '-', ','))


изврат конечно... стоит задуматься о реструктуризации БД

  Ответить  
 
 автор: KPETuH   (11.04.2014 в 10:18)   письмо автору
 
   для: moonfox   (10.04.2014 в 23:40)
 

Если есть возможность то лучше такие наборы разделять не "-", а ","

  Ответить  
 
 автор: Valick   (11.04.2014 в 10:45)   письмо автору
 
   для: KPETuH   (11.04.2014 в 10:18)
 

в БД вообще не должно быть таких наборов ни "-" ни а "," ни какких либо других разделителей

  Ответить  
 
 автор: KPETuH   (11.04.2014 в 11:29)   письмо автору
 
   для: Valick   (11.04.2014 в 10:45)
 

ну иногда они есть ) и в случае с ', ' бывает удобно использовать

не забываем про тип данных SET

  Ответить  
 
 автор: moonfox   (11.04.2014 в 12:32)   письмо автору
 
   для: KPETuH   (11.04.2014 в 11:29)
 

это все не критично
пусть цифры идут через пробел
11 25 36 2 1
это был просто пример с тире

  Ответить  
 
 автор: KPETuH   (11.04.2014 в 12:47)   письмо автору
 
   для: moonfox   (11.04.2014 в 12:32)
 

это не критично, но ',' удобнее для выборки например проще сделать

SELECT * FROM `bla-bla-bla` WHERE `id` IN (11,25,36,2,1)


чем сначала обрабатывать '-' и 'пробел'

  Ответить  
 
 автор: moonfox   (11.04.2014 в 12:38)   письмо автору
 
   для: Valick   (11.04.2014 в 10:45)
 

как по вашему мнению лучше сделать тогда вообще)
хранить значения по строчно в сводной таблице или строку представить в другом виде?

  Ответить  
 
 автор: KPETuH   (11.04.2014 в 12:44)   письмо автору
 
   для: moonfox   (11.04.2014 в 12:38)
 

поменяйте на ','

и тогда

FIND_IN_SET('54', `txt`)

  Ответить  
 
 автор: Valick   (11.04.2014 в 12:48)   письмо автору
 
   для: moonfox   (11.04.2014 в 12:38)
 

Если выучить хотя бы три первых правила нормализации таблиц, то проблем с построением архитектуры БД уже не будет никогда.
Определяются сущности и отношения между ними.
На каждую сущность по таблице + таблица связи если отношение многие ко многим.
Всё. Тут даже думать не надо, всё уже давно придумали.

  Ответить  
 
 автор: moonfox   (11.04.2014 в 15:12)   письмо автору
 
   для: Valick   (11.04.2014 в 12:48)
 

оно вот так

таблица params
id | name
-------------
1  | red
2  | green
3  | blue

таблица objects
id | name
-------------
1  | cup
2  | ball
3  | pen

таблица selected_params
id | obj_id | param_id
-----------------------------
1  |   1    |   1
2  |   1    |   2
3  |   1    |   3
4  |   2    |   1


5000 объектов
30 параметров
среднее число параметров на 1 объект 15
итого примерно 75 000 записей выбранных параметров....
мне вот показалось, что список id параметров проще помещать в дополнительное поле таблицы objects одной строкой.

  Ответить  
 
 автор: Valick   (11.04.2014 в 17:11)   письмо автору
 
   для: moonfox   (11.04.2014 в 15:12)
 

нет не проще

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

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