|
|
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
Доброго времени, не так давно узнал об этой интересной весьма и удобной функции, но смысла как она работает, никакие мануалы не помогли, вроде понятно, а ничего в итоге непонятно, есть у меня одна криворукая база, к каждому товару привязано несколько категорий в формате 1,2,3,4,5 чтобы выбрать товары из одной категории был написан не менее тонкий подход, как взять и парсить это поле регулярками WHERE a.catalog REGEXP [[:<:]]($list['id'])[[:>:]] но что тут поделаешь, скорость конечно никакая при выборке но она работала. Открыв сегодня код, мне пришла идея попробовать вот так WHERE FIND_IN_SET($list['id'], a.catalog) и что меня больше удивило что это дело заработало, но как? я не могу понять, я столько времени искал альтернативу регулярке и кроме как LIKE ничего не подходило, может мне кто нибудь на пальцах просто объяснить, просто на пальцах, без тыканий в мануалы))))) просто магия какая то, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 13:59 |
|
||
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
Нет тут никакой магии. Читали бы документацию на самом деле - все было бы просто. 1) FIND_IN_SET возвращает порядковый номер (начиная с 1) искомой подстроки в в большой строке, в которой фрагменты разделены запятыми. Если ничего не находит, то возвращает 0. 2) В секции WHERE результат выражения приводится к булевскому. 0 - ложь, остальное - истина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 14:05 |
|
||
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
верно ли я понимаю что она будет работать и в джойне? LEFT JOIN prod b ON FIND_IN_SET(a.id, b.compa) то есть проводить связь между таблицами? или нужно использовать синтаксис sql 92 для свзяи именно во WHERE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 14:10 |
|
||
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
ну да и джойнить тоже можно, просто чудесное средство от денормализованных баз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 14:27 |
|
||
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
Это не "удобная функция", а кривой костыль для тех, у кого не хватило соображалки сразу построить нормальную структуру базы. А средство от денормализованной базы есть только одно - это её нормализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 14:36 |
|
||
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
Xploder, Работать-то она будет где угодно, где по синтаксису допустимы выражения. А вот про индексы при таком употреблении забудьте. Соответственно, быстродействие будет не на высоте, мягко говоря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 14:38 |
|
||
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
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'); и играючись допонимаешь что не допонял в мануале, а то таки да, иногда при слабом знании английского, да и при знании - бывает что сразу не понятны детали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 15:38 |
|
||
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
Всем, привет! Так-как быстрее будет, хранить в таблице с товарами, ид категории в таком виде 1,2,3,4,5 и выводить через FIND_IN_SET (нет индексов и думаю он будет медленнее) или многие ко многим, ид категорий и ид товара хранить в отдельной таблице и выводить через JOIN (есть индексы и думаю он будет быстрее)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 10:49 |
|
||
|
Вопрос по FIND_IN_SET
|
|||
|---|---|---|---|
|
#18+
Nikolay_Lemбыстрее будет, хранить в таблице с товарами, ид категории в таком виде 1,2,3,4,5 и выводить через FIND_IN_SET (нет индексов и думаю он будет медленнее) или многие ко многим, ид категорий и ид товара хранить в отдельной таблице и выводить через JOIN (есть индексы и думаю он будет быстрее)?Или ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 10:53 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38754714&tid=1831468]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 434ms |

| 0 / 0 |
