Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pobranie wszystkich tagów dla każdego z artykułów
Forum PHP.pl > Forum > Przedszkole
Calibri
Cześć. Mam problem który próbuję rozwiązać a nie udaje mi się.

Pobieram wszystkie artykuły które przynależą do jednej kategorii. Chciałbym przy nich też wyświetlać wszystkie tagi które są połączone z każdym z artykułów.

Chcę to rozwiązać korzystając z PDO za pomocą jednego zapytania.

Znalazłem rozwiązanie na wikibooks -> Obsługa relacji w PDO ale po zastosowaniu to nie chce za bardzo działać.

Co prawda podaje mi poprawny pierwszy tytuł artykułu wybranej kategorii ale dalej sypie błędami "niezdefiniowany index: title". Tak nie powinno się stać gdyż te niezdefiniowane indexy odnoszą się do innych artykułów innych działów niż ten który wybrałem. Czyli - wywala mi wszystko z bazy.

Oto mój przykład:
  1. $wynik = array();
  2.  
  3. $articles = $m->s_theme_articles($this->idblogs, $_GET['idlinks'], 'byIdLinks'); // wypluwa te dane co w tablicy gdzie id kategorii = $_GET['idlinks']
  4. while ($result = $articles->fetch()) {
  5. $wynik[$result['idarticles']] = array(
  6. 'title' => $result['title'],
  7. 'day' => $result['day'],
  8. 'month' => $result['month'],
  9. 'year' => $result['year'],
  10. 'text' => $result['text'],
  11. 'name' => array()
  12. );
  13. }
  14.  
  15. $stmt = $m->pdo->query('SELECT idarticles, name FROM tags NATURAL JOIN arti_tags ORDER BY idarticles');
  16. while ($result = $stmt->fetch()) {
  17. $wynik[$result['idarticles']]['name'] = array(
  18. 'name' => $result['name']
  19. );
  20. }



Potem do wyświetlenia stosuję ten przykład z wikibooks:

  1. foreach($wynik as $w) {
  2. echo $w['title'];
  3. }


jest tylko wyświetlanie tytułu ale i tak w tym przykładzie sypie mi wszystko - nawet chce wyświetlić (a nie umie) te tytuły które nie należą do wybranej kategorii.
Czy jest sposób na to aby pobierało mi tylko wybrany artykuł z wybranej kategorii. W tej tablicy trzymię idartykułu, to może da się zmodyfikować pętlę poprzez dodanie indeksu równego id kategorii ? Podpowiem że id kategorii da się szybko wyciągnąć - jest to tablica globalna GET



Próbowałem też tak:
pole: name - nazwa taga
tabela: arti_tags - przechowywanie idartykułu i idtaga
tabela: tags - przechowywanie idtaga i nazwę taga
  1. SELECT idarticles, title, DAY(creation_date) AS day, MONTH(creation_date) AS month, YEAR(creation_date) AS year, text, name FROM articles NATURAL JOIN arti_tags NATURAL JOIN tags WHERE (...) ORDER BY idarticles GROUP BY name


ale ten przykład mi wyświetli po jednym tagu który znajdzie jako pierwszy z każdego artykułu.


Jak mam to rozwiązać questionmark.gif Fajnie gdyby dało się to zrobić za pomocą jednego zapytania.


Fajnie by było gdyby jakoś dało się to rozwiązać w PDO.


pozdrawiam.
-kaem-
Może spróbuj podzapytaniem. W postgresie wyglądało by to tak: w podzapytaniu które pobiera nazwy tagów dla konkretnego artykułu po instrukcji select używa się dwóch funkcji(nie pamiętam nazw więc będzie bez przykładu niestety). Pierwsza zwraca wynik(liste tagów) jako tablice, a druga zamienia tą tablicę na string(aby w wyniku była jedna kolumna). Może w MySQL masz podobne mechanizmy?
gothye
spróbuj tak :
  1. SELECT * ,
  2. GROUP_CONCAT(SELECT tag FROM arti_tags WHERE art_tags_id = a.id) AS tags
  3. FROM articles AS a WHERE coś tam ....
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.