![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 170 Pomógł: 14 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
![]() Potrzebuje pobrać wszystkie newsy które są przypisane do danego tagu wraz z tagami z jakimi został utworzony. Mając w bazie Kod ID | TREŚĆ | PRZYPISANETAGI 1 | Treść pierwszego newsa | świat;dom;szklanka 2 | Treść drugiego newsa | świat;czerwony 3 | Inny news | czerwony;kolorowy;niebieski i szukając newsa z takiem 'świat' potrzebuje wyświetlnić Kod 1 | Treść pierwszego newsa | świat;dom;szklanka 2 | Treść drugiego newsa | świat;czerwony Struktura Kod News n_id tresc Tag tag_id - id tag_name - nazwa tagu (np.świat) News_tags (połączenie tagów z odpowiednim id) tag_id news_id Używając zapytania
Dostaje to o potrzebuje i dodatkowo bonusowo zwraca mi pusty news (same wartości null) wraz ze wszystkimi możliwymi tagami. Kod NULL | NULL | świat;dom;szklanka;czerwony;kolorowy;konik;ble;zupa..... 1 | Treść pierwszego newsa | świat;dom;szklanka 2 | Treść drugiego newsa | świat;czerwony Gdy zmienie zapytanie na:
To dostaje newsy które powinienem dostać, jednak w polu `tags` mają tylko jeden szukany tag zamiast wszystkich do których został przypisany. Kod 1 | Treść pierwszego newsa | świat 2 | Treść drugiego newsa | świat Może ktoś wie jak poprawić zapytanie ? |
|
|
![]()
Post
#2
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Jeśli masz tabele MyISAM (nie InnoDB), czyli nie używasz transakcji, ustaw sobie na kolumnie z tagami index FULLTEXT i będziesz mógł wyszukiwać z niej dane przy pomocy przeszukiwania pełnotekstowego używając MATCH() ... AGAINST
To uprości Ci sprawę wyszukiwania. Ten post edytował blooregard 1.02.2009, 19:26:54 -------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 170 Pomógł: 14 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Niestety nie uprości. Większość tagów ma długość 3 znaków, wyszukiwanie potrzebuje co najmniej 4
Zastanawiam się bardziej jak wyeliminować pusty wpis który jest na początku wyników. Edit: Ustawiłem LIMIT 1,X i jakoś żyje. Jeżeli ktoś ma inny pomysł rozwiązania to czekam na propozycje. Edit2: Właśnie się zastanawiam czemu jest FROM `tag` zamist FROM `news` ... Po zmianie wszystko działa ok. Ten post edytował Eagle 2.02.2009, 16:07:50 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 24.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ja wykombinowałem coś takiego... Mam identyczny układ tabel na swojej stronie, więc przetestowałem. Mam nadzieję, że nie popełniłem błędu w zamianie nazw pól
![]()
Ale nie wydaje mi się to optymalne ![]() ![]() Pozdrawiam Ten post edytował złowieszczy_pan 2.02.2009, 16:53:33 |
|
|
![]()
Post
#5
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Cytat Niestety nie uprości. Większość tagów ma długość 3 znaków, wyszukiwanie potrzebuje co najmniej 4 Zmieniasz ustawienia w my.cnf i juz nie musi mieć 4 znaków: [mysqld] ft_min_word_len= [wartosc] -------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 170 Pomógł: 14 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
@złowieszczy_pan:
Twoje zapytanie jest lepsze ![]() Bo moje przez % zwraca wszystkie tagi, wiec jakbym nic nie wyszukiwał tylko wyświetlał. Trzeba pomyśleć jak to da się zoptymalizować (o ile się da ;P) @blooregard Tylko nie zawsze ma się odstęp do tego configa. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.06.2025 - 14:22 |