Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Newsy sortowanie po tagach
Eagle
post 1.02.2009, 18:33:38
Post #1





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


Witam 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
  1. SELECT `news` . * , GROUP_CONCAT( `tag`.`tag_name`
  2. ORDER BY `tag`.`tag_name`
  3. SEPARATOR ';' ) AS `tags`
  4. FROM `tag` LEFT JOIN `news_tags` ON `news_tags`.`tag_id` = `tag`.`tag_id`
  5. LEFT JOIN `news` ON `news`.`a_id` = `news_tags`.`n_id`
  6. WHERE `tag`.`tag_name` LIKE 'NAZWA_TAGU' OR `tag`.`tag_name` LIKE '%'
  7. GROUP BY `news`.`n_id`


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:
  1. SELECT `news` . * , GROUP_CONCAT( `tag`.`tag_name`
  2. ORDER BY `tag`.`tag_name`
  3. SEPARATOR ';' ) AS `tags`
  4. FROM `tag` LEFT JOIN `news_tags` ON `news_tags`.`tag_id` = `tag`.`tag_id`
  5. LEFT JOIN `news` ON `news`.`a_id` = `news_tags`.`n_id`
  6. WHERE `tag`.`tag_name` LIKE 'świat' OR `tag`.`tag_name` LIKE '%' AND `news`.`n_id` != NULL
  7. GROUP BY `news`.`n_id`


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 ?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 21:24