Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyjęcie z bazy listy artykułów i kategorii
c8uKav7BZy
post 29.06.2015, 15:15:34
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
pmir13
post 29.06.2015, 23:44:26
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
c8uKav7BZy
post 30.06.2015, 00:53:13
Post #3





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

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


Wielkie dzięki.
Go to the top of the page
+Quote Post

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: 19.07.2025 - 15:12