Търсене между категории?

streleca_stz

Registered
Здравейте,

Исиам да разбера как точно бих могъл да търся в БД всички резултати, които са в определена категория?
В случая всеки резултат може да е в няколко категории "1,5,17".
Ако имам примера по-горе, как може да търся за категория 5 всички публикации, които имат номера на категорията? Пробвах с LIKE, пробвах с WHERE categories IN (), но все без успех. Всъщност вторият вариант до някъде работи, но само когато да речем ако търся всички резултати от категория 17 ще показва само резултатите, на които първата им категория е тази.
 
Ако говориш за полетата:

- varchar е колоната за категориите на записа - в нея реално записвам ID на категориите, разделени със запетаи;
- сравняването става със самото ID на категорията, така че е primary integer
 
Не е добре както го правиш така, трябва да си нормализираш таблиците - в случая трябва да имаш отделна таблица с нещата и отделна таблица с категориите, и още една, която да ги свързва.

Т.е примерно

articles(id, text...)
categories(id, name)
articles_categories(id, article_id, category_id)

Но все пак, това би трябвало да работи в твоя случай, само внимавай как подаваш стринговете и как са във БД - със или без спейс
Код:
SELECT * FROM `table` WHERE INSTR(`category`, "$string") > 0
 
lam3r4370 каза:
Не е добре както го правиш така, трябва да си нормализираш таблиците - в случая трябва да имаш отделна таблица с нещата и отделна таблица с категориите, и още една, която да ги свързва.

Т.е примерно

articles(id, text...)
categories(id, name)
articles_categories(id, article_id, category_id)

Но все пак, това би трябвало да работи в твоя случай, само внимавай как подаваш стринговете и как са във БД - със или без спейс
Код:
SELECT * FROM `table` WHERE INSTR(`category`, "$string") > 0
Примерът, който си дал е идентично решение както да използвам WHERE string LIKE %string1% - а това на мен не ми върши в случая работа.

За щастие успях да намеря решение на проблема - функцията FIND_IN_SET (последвайте линка за малко инфо за функцията)

Иначе да, наистина по принцип е по-добрия вариант да използвам междинна таблица за релация, но самият проект вече е разработен по този начин, затова и ми изникна проблема. Но все пак благодаря за информацията! :?:
 

Back
Горе