Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyjęcie z bazy listy artykułów i kategorii
c8uKav7BZy
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.06.2015

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


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ł?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pmir13
post
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


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

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 02:28