Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konstrukcja zapytania z użyciem połączeń
Forum PHP.pl > Forum > Bazy danych > MySQL
tomaszowiaktv
  1. $result = dbquery(
  2.  
  3. "(SELECT tn.*, tc.*, tu.user_id, tu.user_name, tu.user_status
  4. FROM ".DB_NEWS." tn
  5. LEFT JOIN ".DB_USERS." tu ON tn.news_name=tu.user_id
  6. LEFT JOIN ".DB_NEWS_CATS." tc ON tn.news_cat=tc.news_cat_id
  7. WHERE news_cat='3'
  8. GROUP BY news_id
  9. ORDER BY news_datestamp DESC)
  10.  
  11. UNION
  12.  
  13. (SELECT tn.*, tc.*, tu.user_id, tu.user_name, tu.user_status
  14. FROM ".DB_NEWS." tn
  15. LEFT JOIN ".DB_USERS." tu ON tn.news_name=tu.user_id
  16. LEFT JOIN ".DB_NEWS_CATS." tc ON tn.news_cat=tc.news_cat_id
  17. WHERE news_cat='4'
  18. GROUP BY news_id
  19. ORDER BY news_datestamp DESC)"
  20. );



Mam takie podwójne zapytanie. Pierwsza część wyświetla mi rekordy z atrybutem news_cat=3, natomiast druga cześć kodu wyświetla rekordy z news_cat=4 (sortowane według daty dodania).


Wynikiem tego zapytania jest wyświetlanie na ekranie newsów z dwóch kategorii. Najpierw wyświetlane i sortowane są newsy z kategorii o id=3, a następnie wyświetlane są newsy z kategorii o id=4.

Schemat ułożenia newsów na stronie (sortowane według daty dodania):

News 1 ( news_cat=3)
News 3 ( news_cat=3)
News 5 ( news_cat=3)


News 2 ( news_cat=4)
News 4 ( news_cat=4)
News 6 ( news_cat=4)


Czy mógłbym prosić o pomoc/wskazówki w modyfikacji tego zapytania, tak aby newsy (rekordy) mogłyby być przeplatane niezależnie od kategorii do jakiej należą. Z uwzględnieniem daty dodania.

Czyli wynik miałby tak wyglądać:


News 1 ( news_cat=3)
News 2 ( news_cat=4)
News 3 ( news_cat=3)
News 4 ( news_cat=4)
News 5 ( news_cat=3)
News 6 ( news_cat=4)



Proszę o wskazówkę co należy zmienić.
trueblue
Mógłbyś wyprowadzić ORDER BY tak aby sortować zsumowane wyniki, a nie każdy z osobna, ale prościej jest zastąpić UNION jednym zapytaniem z warunkiem: (news_cat=3 or news_cat=4) lub news_cat IN(3,4)
lukasz_os
usuń union a w zapytaniu w klauzuli where daj or (news_cat= 3 or news_cat = 4)
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.