Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] 2 sortowania, 1 zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
lukasamd
Witam,
bawię się php-fusionem i mam takie pytanie. Wyciągam z bazy informacje z tabel dotyczących downloadu a potem robię z tego 2 tabelki:
- Najnowsze pliki w downloadzie
- Najpopularniejsze pliki (wg. ilości ściągnięć)

Tak wygląda kod:
  1. <?php
  2. echo '<center><h3>Najowsze pliki</h3></center><br>';
  3. $result = dbquery("SELECT download_id, download_cat, download_title, download_datestamp FROM ".$db_prefix."downloads ORDER BY download_datestamp DESC LIMIT 10");
  4.  
  5. echo ('<center><table width=60% border=1 class=tbl-down>');
  6. echo ('<tr class=tbl1-down><td align=center><b>Plik:</b></td><td align=center><b>Data dodania:</b></td></tr>');
  7.  
  8. while ($row = dbarray($result))
  9. {
  10. echo ('<tr class=tbl1-down><td align=left><a href='.BASEDIR.'downloads.php?cat_id='.$row['download_cat'].'&download_id='.$row['download_id'].'>'.$row['download_title'].'</a></td>');
  11. echo ('<td align=center>'.showdate("longdate", $row['download_datestamp']).'</td></tr>');
  12. }
  13. echo ('</table></center>');
  14. echo ('<br><br><br>');
  15.  
  16. echo '<center><h3>Najpopularniejsze pliki</h3></center><br>';
  17. $result = dbquery("SELECT download_id, download_cat, download_title, download_count FROM ".$db_prefix."downloads ORDER BY download_count DESC LIMIT 10");
  18.  
  19. echo ('<center><table width=60% border=1 class=tbl-down>');
  20. echo ('<tr class=tbl1-down><td align=center><b>Plik:</b></td><td align=center><b>Ilość pobrań:</b></td></tr>');
  21. ?>


Jak widać mam 2 zapytania do bazy. Czy da się zrobić to samo ale w 1 zapytaniu? Jak posortować te wyniki tak aby były do wykorzystania i tu i tu. Operacją taką chyba nie ma sensu przecież obciążać interpretera php.
abusiek
Nie wiem czy wpychanie tego na sile w jedno zapytanie ma jakikolwiek sens, ale mi wpadla do glowy taka idea (bo z tego co pamietam nie mozna zwrocic dwoch table naraz), zeby zrobic sobie unię.

Na przyklad: mamy tabelke accounts (id int, login varchar); I teraz wykonujemy takie zapytanie:

  1. SELECT a.id, a.login FROM (SELECT * FROM accounts ORDER BY login) AS a UNION ALL SELECT b.id, b.login FROM (SELECT * FROM accounts ORDER BY id) AS b


W rezultacie do polowy mamy wiersze posortowane po loginie a od polowy te same wiersze posortowane po id.

Dodam jeszcze ze nie wiem czy to najlepszy sposob winksmiley.jpg
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.