Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyjęcie z bazy listy artykułów i kategorii
Forum PHP.pl > Forum > Bazy danych > MySQL
c8uKav7BZy
Witam,
Chcę napisać system newsów z możliwością przypisania kilku kategorii do jednego artykułu.
Mam cztery tabele:
  1. tabela users:
  2. | id (auto_increment) | name | email | pass |
  3.  
  4. tabela categories:
  5. | id (auto_increment) | name |
  6.  
  7. tabela articles:
  8. | id (auto_increment) | title | content | date | id_user |
  9.  
  10. tabela articles_categories
  11. | id_articles | id_category |

Poniższym zapytanie wyjmuję z bazy listę artykułów i autorów.
  1. SELECT
  2. a.title,
  3. a.content,
  4. u.name
  5. FROM
  6. article AS a,
  7. users AS u
  8. WHERE
  9. a.id_user = u.id

Chciałbym aby w tym zapytaniu z bazy zostały wyjęte jeszcze kategorie artykułów.
Może ktoś podrzucić pomysł?
pmir13
Wprawdzie przy INNER JOIN nie ma różnicy czy warunek złączenia wrzucisz do WHERE czy do ON, ale proponuję jednak korzystać z tej drugiej składni. Bo już przy LEFT JOIN różnica jest, a że będziesz potrzebować właśnie takiego typu złączenia do wyciągnięcia kategorii w sytuacji gdy artykuł może nie mieć przypisanej żadnej kategorii, to lepiej jednak dla czytelności mieć od razu widoczne po jakich kolumnach łączysz. Zresztą to dobra praktyka jest.

Jeśli chcesz mieć dla artykułu wiele rekordów każdy z inną kategorią to po prostu dodajesz dwie tabele łącząc articles_categories po id_articles oraz categories po id_category, a jeśli w jednym rekordzie listę kategorii oddzielonych przecinkiem to stosujesz GROUP BY i GROUP_CONCAT w podzapytaniu, czyli przykładowo:

  1. SELECT a.title, a.content, u.name, cl.category_list
  2. FROM articles a JOIN users u
  3. ON a.id_user = u.id
  4. LEFT JOIN
  5. ( SELECT ac.id_articles, GROUP_CONCAT( c.name ) AS category_list
  6. FROM articles_categories ac JOIN categories c
  7. ON ac.id_category = c.id
  8. GROUP BY ac.id_articles ) cl
  9. ON a.id = cl.id_articles
c8uKav7BZy
Wielkie dzięki.
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.