Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2012, 00:13   #1
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
Вопрос Условие поиск в сплит-строке

Подскажите пожалуйста что можно написать вместо функция
Код:
select contentid, value  from mestoman_revo_site_tmplvar_contentvalues where (tmplvarid=13) and (функция(value)=20)
value представлено в виде склеенной из значений строки такого формата:
Код:
5||6||10||20||3||1
мускул, база данных от CMS MODX Revo


думал LIKE заюзать но что то не понимаю как лучше то сделать...
P.S. если можно, не сильно тормознуто чтоб работало, потому что это кусок сложного составного запроса, который итак напрягает норм субд
Писано по д'Эльфийски

Последний раз редактировалось Лубышев; 09.11.2012 в 00:19.
Лубышев вне форума Ответить с цитированием
Старый 09.11.2012, 00:42   #2
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

а не хочешь вместо склеивания хранить как множество и искать через оператор IN ?
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 09.11.2012, 01:06   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

таково устройство CMS - не мною предуманная структура
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 09.11.2012, 08:37   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Чем value LIKE '%20%' не подходит? Если кроме 20 возможно и 200 или 020, то в начало и конец строки вставить | и использовать value LIKE '%|20|%'. Тормозить будет что с функцией, что с LIKE, поскольку индексы здесь слабо задействовать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.11.2012 в 08:45.
Аватар вне форума Ответить с цитированием
Старый 09.11.2012, 10:52   #5
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Дело в том, что ModX Revo требует именно такого формата ни чего нельзя ставить ни в начало ни в конец. это у него такой сплит, если поставить в начало и в конец разделители, то он не правильно будет обрабатывать эту запись.
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 09.11.2012, 11:58   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В самом поле и не надо. Для сложения строк в MYSQL если не ошибаюсь CONCAT используется, тогда так
Код:
CONCAT('|',value,'|') LIKE '%|20|%'
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.11.2012, 13:10   #7
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

а если элемент окажется первым или последним?

Код:
select contentid, value  from mestoman_revo_site_tmplvar_contentvalues where (tmplvarid=13) and 
((CONCAT('|',value,'|') LIKE '%|20|%') or (CONCAT('|',value) LIKE '%|20%')
 or (CONCAT(value,'|') LIKE '%20|%'))

ступил, все понял спс

такой код
Код:
select contentid, value  from mestoman_revo_site_tmplvar_contentvalues where (tmplvarid=13) and 
(CONCAT('|',value,'|') LIKE '%|20|%')
Писано по д'Эльфийски

Последний раз редактировалось Stilet; 09.11.2012 в 15:01.
Лубышев вне форума Ответить с цитированием
Старый 09.11.2012, 13:16   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Лубышев Посмотреть сообщение
а если элемент окажется первым или последним?
А для этого к Value слева и справа и добавляется | и при проверке он будет выглядеть как |5||6||10||20||3||1| и не нужно кучу OR делать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.11.2012, 13:35   #9
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Спасибо, разобрался, но
"Вы должны добавить отзыв кому-то еще, прежде чем сможете снова добавить его Аватар"
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 22.01.2013, 13:09   #10
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Ребят, появилась еще одна задачка такого же плана. не знаю как быть...
фотмат строки такой:
Код:
Марка==ВАЗ||Объем==1,6||Кузов==Седан
и тут возникла задача найти всх кто является допустим ВАЗ. тогда
кусочек запроса такой:
Код:
(CONCAT("|",dop_val,"|") LIKE "%|Марка==ВАЗ|%")
все круто, но второй вопрос:
надо найти всех у кого обьем больше 1 но меньше 2.
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск процесса и условие ashkalov Win Api 2 30.07.2012 14:52
Как сделать сплит тест на рассыльщике MailTux DenIvanov PHP 0 11.07.2010 09:34
Поиск в строке SsdD Общие вопросы Delphi 2 02.05.2010 10:35
поиск в строке Apis Общие вопросы C/C++ 1 27.04.2010 22:04