Operator LIKE - wybieranie wpisów

0

Witam, mam taki problem, otóż przechowuje sobie kategorie wpisu w postaci: 1|4|10|14 gdzie numery to id poszczególnej kategorii. Pole z kategorią jest typu varchar. Teraz chcę wyświetlić artykuły z kategorii o danym id ale nie mogę dopasować tak żeby zapytanie było uniwersalne do id jednocyfrowego i wielocyfrowego. Robię to w ten sposób:

 
SELECT * FROM artykuly WHERE `kategorie` LIKE '%1%'

takie zapytanie pobiera mi też artykuły z id równym 10 a tego nie chce. a jak dam tak:

 
SELECT * FROM artykuly WHERE `kategorie` LIKE '%1|%'

to już nie znajdzie kategorii o dwucyfrowym id. Jak to rozwiązać?

1

może tak:

SELECT * FROM artykuly WHERE Concat('|',`kategorie`,'|') LIKE '%|1|%'

gdzie oczywiście zamiast 1 wstawiasz interesujący cię id...
Ale metoda na przechowywanie reacji - porąbana...

0

Przyznam się że metoda przechowywania relacji wymyślona na szybko, ale jeśli już przy tym jesteśmy to w jaki sposób można przechowywać nazwy/id kategorii artykułów, przyjmując że nie jest to jedna kategoria tylko kilka?

0

poczytaj jak się implementuje relacje m-n w bazach danych (szybki hint: wprowadza się dodatkową tabelę) bo to co masz teraz to jest tak jakbyś odkręcił od samochodu wszystkie koła i przykręcił je wszystkie w miejscu np. prawego przedniego - niby wszystkie koła są na miejscu, jak się skupisz to pojedziesz ale ani się takim samochodem daleko nie zajedzie ani komfortu nie ma a i więcej się trzeba namęczyć niż to warte

0

z dodatkową tabelą to oczywista oczywistość ;) jest zrobiona i w niej przechowuje właśnie jej id, nazwę itp. ale problem tkwi w tym jak przechowywać wiele kategorii dla jednego wpisu, aby było w miarę optymalnie, bo głównie z tym jest problem.

0

poczytaj jak się implementuje relacje m-n w bazach danych a to co ty masz to jest tabela słownikowa

0

ok, już wiem, fajna sprawa taka tabelka z indeksami, i wybieranie danych elementów jest dużo szybsze niż przez CONCAT. dzięki za nakierowanie. pozdrawiam! ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1