Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поиск по таблице
Форумы портала PHP.SU » » Работа с СУБД » Поиск по таблице

Страниц (1): [1]
 

1. allasan - 10 Января, 2014 - 12:15:33 - перейти к сообщению
Здравствуйте.
Кратко о проблеме: есть в базе строка "2,45,85,33,22,25", как при помощи LIKE определить есть ли в этой строке "2"?
LIKE '%2%' не подходит, т.к. это условие не учитывает разделение запятой и среагирует на ",22,".
т.е. как построить запрос LIKE, чтобы он нашел число, окруженное запятыми с обеих сторон, либо только с одной стороны, либо вообще не окружен?

Или другими словами, вокруг искомого теста может быть либо запятая, либо ничего

Заранее спасибо!
2. DelphinPRO - 10 Января, 2014 - 12:27:23 - перейти к сообщению
нужно использовать связку двух таблиц. а не хранить идентификаторы через запятую в одном поле.
3. allasan - 10 Января, 2014 - 12:34:11 - перейти к сообщению
DelphinPRO пишет:
нужно использовать связку двух таблиц. а не хранить идентификаторы через запятую в одном поле.


Нет нужно именно так. Объясню на примере. Есть статья, статья принадлежит нескольким городам, IDшники городов находятся в поле gorod таблицы statya.
4. IllusionMH - 10 Января, 2014 - 12:46:11 - перейти к сообщению
allasan, это не так нужно, это так криво реализовано!
Если не ходите сделать по-человечески - 12[dot]5[dot]2[dot] Regular Expressions
5. Мелкий - 10 Января, 2014 - 12:49:03 - перейти к сообщению
Использовать нормальную внешнюю таблицу отношений.

allasan пишет:
Нет нужно именно так.

Докажите.
Так как у вас - не делается.
6. SAD - 10 Января, 2014 - 12:50:25 - перейти к сообщению
добавляете слева и справа по запятой и LIKE '%,2,%'
если, конечно, не хотите сделать правильно, как Вам предлагают

так как это айдишники, то однозначно правильно делать таблицу связей
7. imya - 10 Января, 2014 - 13:02:07 - перейти к сообщению
allasan пишет:
вокруг искомого теста может быть либо запятая, либо ничего




?
Неккоректно, судя по архитектуре, но если Вы не хотите перерабатывать её, попробуйте такой вариант.
8. allasan - 10 Января, 2014 - 13:13:21 - перейти к сообщению
Странно, но я везде видел что делается именно так. В самых популярных скриптах.
А что за таблица связей?
9. IllusionMH - 10 Января, 2014 - 13:22:15 - перейти к сообщению
allasan пишет:
Странно, но я везде видел что делается именно так.

allasan, пруф или не было. Ни в одной нормальной системе не будут городить такую фигню. вместо нормальной организации связи 1-к-многим, многие-к-многим.
Загляните в любимый поисковик с словами выделенными курсивом
10. Мелкий - 10 Января, 2014 - 13:30:37 - перейти к сообщению
Есть:
таблица1 чего-то, имеет id
таблица2 чего-то другого, тоже имеет свой id (tid, чтобы не путаться).
Цель: сделать множественные связи между ними.
Решение:
Создать таблицу связей, включающую в себя всего 2 поля: id из, соответственно, обеих таблиц. Уникальный ключ на оба поля (при необходимости, такой же ключ с обратным порядком полей)
Одна строка в таблице - одна однозначная связь.
11. allasan - 10 Января, 2014 - 14:17:34 - перейти к сообщению
Не, это все слишком усложняет и влечет за собой много переделок уже готового, вобщем всем спасибо, думаю сделаю по другому
12. Мелкий - 10 Января, 2014 - 14:22:41 - перейти к сообщению
Это всё упрощает и кардинально улучшает производительность поиска по связям.
Много переделывать - да, застарелые костыли всегда сложно выпиливать.
13. DelphinPRO - 10 Января, 2014 - 14:44:25 - перейти к сообщению
allasan пишет:
и влечет за собой много переделок уже готового,

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

 

Powered by ExBB FM 1.0 RC1