Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie do bazy w petli ?
Forum PHP.pl > Forum > Przedszkole
hmmm
stworzylem sobie taki skrypcik, ktory dziala jak najbardziej poprawnie.
to jego fragment:

  1. <?php
  2. //wyswietl wszystkie lata w kolejnosci od roku ostatniego do pierwszego
  3. for ($year; $year >= $yearless; $year--) {
  4. echo &#092;"<div class=\"menutd2\">n\" . $year . \"n</div>n\";
  5.  
  6. //wyswietl wszystkie miesiace w danym roku podczas ktorych zostaly napisane notki
  7. $query5 = mysql_query (&#092;"SELECT DISTINCT DATE_FORMAT(datetime, '%m') FROM notes WHERE DATE_FORMAT(datetime, '%Y') = $year ORDER BY datetime\");
  8. if ($query5) {
  9. while ($row = mysql_fetch_array($query5, MYSQL_NUM)) {
  10.  
  11. //tutaj inne tresc; w skrocie:
  12. $month = $row[0];
  13.  
  14. //wyswietl miesiac
  15. echo &#092;"<div class=\"menutd3\">n<a class=\"gray\" href=\"index.php?file=\" . $year . \"-\" . $row[0]  . \"\">\" . $month . \"</a>n</div>n\";
  16. }
  17. }
  18. ?>

ale ...
Cytat
(...) jak można w środku pętli dać robienie zapytań do bazy danych? Przecież w ten sposób zajedziesz tą bazę :-/

moje pytanie brzmi - jak moge zmodyfikowac ten srkupt?
crash
Nie zajedziesz jak nie ma zbyt wielu iteracji tej petli for
sf
Hm, ale po co robić takie zapytania jak przeważnie można wyciągnąc te dane wcześniej jednym zapytaniem? Lepiej odrazu uczyć się pisać optymalnie niż potem wszystko poprawiać ;]

Oto taki przykład :
  1. <?php
  2.  
  3. // pobierz ograniczona ilosc wiadomosci oraz ile zawieraja komentarzy
  4. $sql = 'SELECT n.*, count(c.cnID) AS nc FROM '.$SFN['table_prefix'].'news AS n LEFT JOIN '.$SFN['table_prefix'].'comments AS c ON (c.cnID = n.nID) WHERE n.nDate >= \"'.$ym.'01\" AND n.nDate <= \"'.$ym.'31\" GROUP BY n.nID ORDER BY n.nID DESC LIMIT '.$iStart.','.$SFN['news_on_page'];
  5. ?>

Można to było też zrobić, że pobieram listę wiadomości, a potem w środku pętli do każdej wiadomości zapytanie ile ma komentarzy.

hmmm: zależy jak wyglądają tabele i co chcesz wyciągnąć, czasem dochodzi się do wniosku, że źle skonstruowaliśmy te tabele i pola, zwłaszcza jak dopiero zaczynamy, a poprawiając i próbująć zoptymalizować to wszytko uczymy się, a na przyszłość jesteśmy bogatsi o doświadczenie i kolejne nasze tabele będą lepiej skonstruowane oraz nasz skrypt będzie szybciej działał.
hmmm
tak mi sie wydawalo, ze za bardzo to jej nie 'zajade' przy tej ilosci danych, ale zawsze lepiej wiedziec na przyszlosc, jak to zrobic poprawnie ... chociaz szczerze mowiac na pierwszy rzut oka mam problemy ze zrozumieniem twojego skryptu sf, nie wiem co oznacza i jaki wynik daje LEFT JOIN
sf
Ja też niedawno się dowiedziałem do czego to jest winksmiley.jpg Popatrz do manuala na stronie mysql.com oraz tutaj na forum na przykłady jak ludzie z tego korzystali. Wytłumaczenia się nie podejmuję z uwagi na małe doświadczenie w tej dziedzinie smile.gif
hmmm
rzeczywiscie, ktos cos niedawno pisal o tym ... ale nie pamietam co :P
wniosek - trzeba poczytac.
dzieki za pomoc.
pauluZ
Cytat(hmmm @ 2005-01-28 22:14:20)
[...]nie wiem co oznacza i jaki wynik daje LEFT JOIN[...]

Przykładowe wyjaśnienie działania konstrukcji JOIN w SQLu:
LEFT JOIN, RIGHT JOIN, INNER JOIN
hmmm
bardzo lopatologicznie, ale to dobrze.
przeczytalem, zrozumialem przyklady, ale sam swojego kodu nie potrafie sklepac ...
mam jedna tabele, w niej kolumne datetime, w ktorej z kolei dane sa zapisywane w fomie datetime (rrrr-mm-dd gg-mm-ss).
chce teraz pobrac wszystkie lata i potem miesiace.

cos takiego:
2003:
pazdziernik
grudzien
2004:
styczen
kwiecien
maj
sierpien
2005:
styczen
luty

prosze pomozcie ...

edit
-----
prosze u usuniecie tego posta, gdyz podobny zamiescilem na podforum mysql, gdyz wydalo mi sie, ze tam lepiej pasuje trescia i problematyka 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.