Operator LIKE - wybieranie wpisów

Operator LIKE - wybieranie wpisów
corey
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
 
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:

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

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

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1

może tak:

Kopiuj
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...

corey
  • Rejestracja: dni
  • Ostatnio: dni
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?

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
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

corey
  • Rejestracja: dni
  • Ostatnio: dni
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.

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
0

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

corey
  • Rejestracja: dni
  • Ostatnio: dni
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! ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.