Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zapytanie do bazy w petli ?
hmmm
post 28.01.2005, 20:37:35
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


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?

Ten post edytował hmmm 28.01.2005, 20:38:45
Go to the top of the page
+Quote Post
crash
post 28.01.2005, 21:29:52
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Nie zajedziesz jak nie ma zbyt wielu iteracji tej petli for


--------------------
Go to the top of the page
+Quote Post
sf
post 28.01.2005, 21:38:56
Post #3





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


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ł.


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
hmmm
post 28.01.2005, 22:14:20
Post #4





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


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
Go to the top of the page
+Quote Post
sf
post 28.01.2005, 22:19:29
Post #5





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


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


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
hmmm
post 28.01.2005, 22:21:43
Post #6





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


rzeczywiscie, ktos cos niedawno pisal o tym ... ale nie pamietam co :P
wniosek - trzeba poczytac.
dzieki za pomoc.
Go to the top of the page
+Quote Post
pauluZ
post 14.02.2005, 11:40:31
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 9.02.2004
Skąd: Toruń

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


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


--------------------
pauluZ
Go to the top of the page
+Quote Post
hmmm
post 20.02.2005, 20:30:48
Post #8





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


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

Ten post edytował hmmm 21.02.2005, 16:08:20
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 - 16:44