Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]5 ostatnich rekordów (po jednym z tabeli)
--Obcy--
post
Post #1





Goście







Witam.
Ostatnio napisałem prosty system newsów, wszystko jest ok ale...
Mam pięć 'kategorii' newsów rozmieszczonych w tabelach odpowiadających kategorii.
Na podstronie danej kategorii wyświetlam 10 ostatnich...
Ale chciałbym na stronie głównej umieścić 5 ostatnich ogólnie, czyli ze wszystkich kategorii.

Myślałem, żeby zrobić po prostu:
ostatni z 1 kat.
ostatni z 2 kat.
ostatni z 3 kat.
ostatni z 4 kat.
ostatni z 5 kat.

Ale to odpada bo jest to dosyć 'sztywne' i w ogóle nie o to chodzi. Dodając 5 newsów do kat. 3 (do reszty nic) na głównej powinno wyświetlić się te 5 nowo dodanych.

PS. Pisząc posta wpadłem na pomysł (IMG:style_emoticons/default/smile.gif) (Forum pomaga samo z siebie bez interwencji użytkowników (IMG:style_emoticons/default/biggrin.gif) )
Można przecież wszystkie newsy upakować w jednej tabeli i stworzyć kolumnę 'kategoria'. Później przy pobieraniu tych 5-ciu darować sobie WHERE i jest 5 ostatnich (IMG:style_emoticons/default/smile.gif)
A przy pobieraniu rekordów dla danej kategorii zastosować:
  1. $kategoria = 'kategoria1';
  2.  
  3. (...)WHERE kategoria = '$kategoria' (...)


Czy dobrze kombinuję? ;> A może jakiś lepszy i wydajniejszy sposób znacie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
--Obcy--
post
Post #2





Goście







Czy dobrze rozumiem logikę?

Dodaję newsa wybierając kategorię1

W tabeli 'newsy' wszystko ląduje na swoje miejsce (pomijając datę modyfikacji - ty jest pusto)
Jednocześnie do tabeli 'news_kategoria' ląduje takie samo id_newsa jak w tabeli 'newsy' oraz id_kategoria takie samo jak w tabeli 'kategorie'

Ale jak odwołać się do tych 3 tabel?
Go to the top of the page
+Quote Post
bostaf
post
Post #3





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(-Obcy- @ 8.10.2012, 21:18:10 ) *
Czy dobrze rozumiem logikę?

Dodaję newsa wybierając kategorię1

W tabeli 'newsy' wszystko ląduje na swoje miejsce (pomijając datę modyfikacji - ty jest pusto)
Jednocześnie do tabeli 'news_kategoria' ląduje takie samo id_newsa jak w tabeli 'newsy' oraz id_kategoria takie samo jak w tabeli 'kategorie'

Tak. Dokładnie tak.
Dodając newsa możesz wybrać nawet więcej niż jedną kategorię, ale to nie jest wymóg. Brak kategorii też powinien być dopuszczalny. Powinna być po prostu możliwość edytowania kategorii (np dla admina albo moderatorów albo autora newsa).

Cytat(-Obcy- @ 8.10.2012, 21:18:10 ) *
Ale jak odwołać się do tych 3 tabel?

Trzeba je łączyć składnią językową JOIN. Na przykład, żeby pobrać 2 ostatnie newsy posortowanye po dacie malejąco, razem ze wszystkimi kategoriami, do których każdy jest przypisany:
  1. SELECT
  2. n.id_newsa,
  3. n.tytul,
  4. CONCAT_WS(',', k.nazwa) AS kategorie
  5. FROM newsy n
  6. LEFT JOIN news_kategoria nk ON nk.id_newsa = n.id_newsa
  7. LEFT JOIN kategoria k ON k.id_kategoria = nk.id_kategoria
  8. ORDER BY n.data_dodania DESC
  9. LIMIT 2

W wyniku można dostać coś takiego:
Kod
id_newsa | tytul                          | kategorie
---------+--------------------------------+--------------------------
     123 | Mój sto dwudziesty trzeci news | komputery,nauka
       2 | Teścik                         | testy,programowanie,mysql

A taki wynik można elegancko obrobić w PHP.
JOINy są dla niektórych na początku trudne do ogarnięcia, zwłaszcza że jeden cel można czasami osiągnąć kilkoma sposobami, ale trening czyni mistrza ;)
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: 13.10.2025 - 01:35