![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 14 Dołączył: 16.03.2007 Ostrzeżenie: (0%)
|
Witam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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 |
|
|
|
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Ale nie wydaje mi się to optymalne (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) hahaha (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) 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] |
|
|
|
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) 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. |
|
|
|
![]() ![]() |
|
Aktualny czas: 31.12.2025 - 07:28 |