powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос по FIND_IN_SET
10 сообщений из 10, страница 1 из 1
Вопрос по FIND_IN_SET
    #38754646
Xploder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени, не так давно узнал об этой интересной весьма и удобной функции, но смысла как она работает, никакие мануалы не помогли, вроде понятно, а ничего в итоге непонятно, есть у меня одна криворукая база, к каждому товару привязано несколько категорий в формате 1,2,3,4,5 чтобы выбрать товары из одной категории был написан не менее тонкий подход, как взять и парсить это поле регулярками WHERE a.catalog REGEXP [[:<:]]($list['id'])[[:>:]] но что тут поделаешь, скорость конечно никакая при выборке но она работала. Открыв сегодня код, мне пришла идея попробовать вот так WHERE FIND_IN_SET($list['id'], a.catalog) и что меня больше удивило что это дело заработало, но как? я не могу понять, я столько времени искал альтернативу регулярке и кроме как LIKE ничего не подходило, может мне кто нибудь на пальцах просто объяснить, просто на пальцах, без тыканий в мануалы))))) просто магия какая то, спасибо!
...
Рейтинг: 0 / 0
Вопрос по FIND_IN_SET
    #38754661
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет тут никакой магии. Читали бы документацию на самом деле - все было бы просто.

1) FIND_IN_SET возвращает порядковый номер (начиная с 1) искомой подстроки в в большой строке, в которой фрагменты разделены запятыми. Если ничего не находит, то возвращает 0.
2) В секции WHERE результат выражения приводится к булевскому. 0 - ложь, остальное - истина.
...
Рейтинг: 0 / 0
Вопрос по FIND_IN_SET
    #38754674
Xploder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
верно ли я понимаю что она будет работать и в джойне? LEFT JOIN prod b ON FIND_IN_SET(a.id, b.compa) то есть проводить связь между таблицами? или нужно использовать синтаксис sql 92 для свзяи именно во WHERE?
...
Рейтинг: 0 / 0
Вопрос по FIND_IN_SET
    #38754707
Xploder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну да и джойнить тоже можно, просто чудесное средство от денормализованных баз
...
Рейтинг: 0 / 0
Вопрос по FIND_IN_SET
    #38754714
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не "удобная функция", а кривой костыль для тех, у кого не хватило соображалки сразу построить нормальную структуру базы.
А средство от денормализованной базы есть только одно - это её нормализация.
...
Рейтинг: 0 / 0
Вопрос по FIND_IN_SET
    #38754718
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xploder,

Работать-то она будет где угодно, где по синтаксису допустимы выражения.
А вот про индексы при таком употреблении забудьте. Соответственно, быстродействие будет не на высоте, мягко говоря.
...
Рейтинг: 0 / 0
Вопрос по FIND_IN_SET
    #38754840
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XploderДоброго времени, не так давно узнал об этой интересной весьма и удобной функции, но смысла как она работает, никакие мануалы не помогли, вроде понятно, а ничего в итоге непонятно, есть у меня одна криворукая база, к каждому товару привязано несколько категорий в формате 1,2,3,4,5 чтобы выбрать товары из одной категории был написан не менее тонкий подход, как взять и парсить это поле регулярками WHERE a.catalog REGEXP [[:<:]]($list['id'])[[:>:]] но что тут поделаешь, скорость конечно никакая при выборке но она работала. Открыв сегодня код, мне пришла идея попробовать вот так WHERE FIND_IN_SET($list['id'], a.catalog) и что меня больше удивило что это дело заработало, но как? я не могу понять, я столько времени искал альтернативу регулярке и кроме как LIKE ничего не подходило, может мне кто нибудь на пальцах просто объяснить, просто на пальцах, без тыканий в мануалы))))) просто магия какая то, спасибо!

заходишь в базу через клиент, и начинаешь эксперементировать

select find_in_set('aa','some your string');

и играючись допонимаешь что не допонял в мануале, а то таки да, иногда при слабом знании английского, да и при знании - бывает что сразу не понятны детали.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вопрос по FIND_IN_SET
    #39298441
Nikolay_Lem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем, привет!

Так-как быстрее будет, хранить в таблице с товарами, ид категории в таком виде 1,2,3,4,5 и выводить через FIND_IN_SET (нет индексов и думаю он будет медленнее)
или
многие ко многим, ид категорий и ид товара хранить в отдельной таблице и выводить через JOIN (есть индексы и думаю он будет быстрее)?
...
Рейтинг: 0 / 0
Вопрос по FIND_IN_SET
    #39298442
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikolay_Lemбыстрее будет, хранить в таблице с товарами, ид категории в таком виде 1,2,3,4,5 и выводить через FIND_IN_SET (нет индексов и думаю он будет медленнее)
или
многие ко многим, ид категорий и ид товара хранить в отдельной таблице и выводить через JOIN (есть индексы и думаю он будет быстрее)?Или
...
Рейтинг: 0 / 0
Вопрос по FIND_IN_SET
    #39298536
Nikolay_Lem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос по FIND_IN_SET
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]