![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%)
|
Witam,
na potrzeby problemu przygotowałem uproszczoną tabelę `wpisy`
pole id - identyfikator wpisu pole nazwa - nazwa wpisu pole kategoria - kategoria wpisu Chcę aby wpis był przypisany do kilku kategorii, dlatego też postanowiłem aby w polu kategoria została zapisywana tablica w formacie json z nazwami kategorii przynależących. Przykład takiego wpisu w tabeli
Czyli pole ["1","7","11","16"] oznacza że wpis należy do kategorii 1,7,11,16. Pytanie: Jak zrobić zapytanie w SQL, ktore wyświetli mi np wszystkie wpisy z kategorii 1? Próbowałem z LIKE
ale wtedy (ponieważ zawierają 1) pobiera mi wszystkie wpisy z kategoriami np 11, 16 (czyli te które zawierają "1"). Więc jak to wyszukiwać? I jakie są sposoby przechowywania tablicy w polu, json wydaje się być całkiem wygodne. Ten post edytował reyne 12.12.2013, 14:13:16 |
|
|
|
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Zle kombinujesz. Ma byc dodatkowa tabela laczaca wpis z kategorią. W sumie maja byc trzy tabele
Tabela WPIS Tabela KATEGORIA Tabela WPIS_KATEGORIA z polami: ID_WPIS, ID_KATEGORIA gdzie kazdy rekord w tej tabeli laczyc jeden wpis z jedna kategorią |
|
|
|
Post
#3
|
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
Kategorie masz otoczone " więc to znacznie ułatawia sprawę:
Twoje rozwiąznie oczywiście do prawidłowych nie należy, ale skoro takie zastosowałeś... Zazwyczaj robi się osobną tabelę do połączenia wpis-kategorie. Od biedy możesz skorzystać z typu danych SET (taki wielowartościowy ENUM). |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%)
|
Myślałem, że takie rozwiązanie będzie wydajniejsze bo zamiast 3 tabel mam jedną (IMG:style_emoticons/default/snitch.gif) . I nie muszę później tworzyć w PHP funkcji, które za każdym razem będą musiały przeszukiwać tabelę wpis_kategoria w poszukiwaniu powiązań. Ale widocznie się mylę ?(IMG:style_emoticons/default/tongue.gif)
Ten post edytował reyne 12.12.2013, 14:28:06 |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%)
|
|
|
|
|
Post
#6
|
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
W jednym masz rację - mylisz się (IMG:style_emoticons/default/smile.gif) Twoje rozwiązanie uniemożliwia chociażby wykorzystanie indeksu. Za każdym razem tabela będzie przeszukiwana sekwencyjnie, będziesz miał problem z napisaniem zapytania (wydajnego) do zliczenia ilości wpisów w kategoriach, itd. itd.
|
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%)
|
Dzięki Wam za rady i do tego też się zastosuję (IMG:style_emoticons/default/wink.gif)
|
|
|
|
Post
#8
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Nie o ilosc chodzi a o wydajnosc.... podobnie jest z pewną inną rzeczą gdzie nie o wielkosc chodzi a tez o wydajnosc (IMG:style_emoticons/default/wink.gif)
|
|
|
|
![]() ![]() |
|
Aktualny czas: 21.12.2025 - 14:07 |