
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
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
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
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
SELECT `news` . * , GROUP_CONCAT( `tag`.`tag_name` ORDER BY `tag`.`tag_name` SEPARATOR ';' ) AS `tags` FROM `tag` LEFT JOIN `news_tags` ON `news_tags`.`tag_id` = `tag`.`tag_id` LEFT JOIN `news` ON `news`.`a_id` = `news_tags`.`n_id` WHERE `tag`.`tag_name` LIKE 'NAZWA_TAGU' OR `tag`.`tag_name` LIKE '%' 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
1 | Treść pierwszego newsa | świat;dom;szklanka
2 | Treść drugiego newsa | świat;czerwony
Gdy zmienie zapytanie na:
SELECT `news` . * , GROUP_CONCAT( `tag`.`tag_name` ORDER BY `tag`.`tag_name` SEPARATOR ';' ) AS `tags` FROM `tag` LEFT JOIN `news_tags` ON `news_tags`.`tag_id` = `tag`.`tag_id` LEFT JOIN `news` ON `news`.`a_id` = `news_tags`.`n_id` WHERE `tag`.`tag_name` LIKE 'świat' OR `tag`.`tag_name` LIKE '%' AND `news`.`n_id` != NULL 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
2 | Treść drugiego newsa | świat
Może ktoś wie jak poprawić zapytanie ?