Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql]Zapytanie w zależności od wyniku
Forum PHP.pl > Forum > Przedszkole
OlgaG
Mam następujący problem:

mam dwa rozbudowania zapytania do bazy danych:
  1. <?php
  2. $query-str= "SELECT... ";
  3. $query-str1= "SELECT... ";
  4.  
  5. //korzystam z mysqli
  6.  
  7. $result = $conn->query($query_str);
  8.  
  9. $result1 = $conn->query($query_str1);
  10. ?>


Chciałabym pobierać wyniki drugiego zapytania za pomocą fetch_assoc(), ale tylko jeżeli z pierwszego zapytania mam pusty wynik. Robię to następująco:

  1. <?php
  2. //najpierw obsługa błędów
  3. if($result === FALSE or $result1 === FALSE)
  4. {
  5. $errno = $conn->errno;
  6. $errmsg = $conn->error;
  7.  
  8. echo "Niestety nie udało się wylosować bloga z kategorii klienta dla tego artykuł
    u:($errno) $errmsg>br />\n"
    ;
  9. }
  10.  
  11. //jeśli wszystko jest ok
  12. else
  13. {
  14. //jeżeli pierwsze zapytanie nie zwróciło pustego wyniku
  15. while(($row_data = $result->fetch_assoc()) !== NULL)
  16. {
  17. //tutaj instrukcje
  18.  
  19.  }
  20. //jeżeli pierwsze zapytanie zwróciło pusty wynik
  21. while(($row_data = $result->fetch_assoc()) == NULL){
  22. while($row_data1 = $result1->fetch_assoc()){
  23.  
  24. //tutaj instrukcje
  25.  }
  26.  }
  27. }
  28. ?>



Problem w tym, że przeglądarka miele skrypt i w końcu go przerywa, bo przekroczony jest limit czasu. Skrypt nie chce się wykonać tylko jeżeli pierwsze zapytanie zwraca pusty wynik, czyli gdy skrypt przechodzi do pętli while w while . Chyba coś przekombinowałam wstydnis.gif

Można jakoś inaczej zapisać tę instrukcję warunkową tak, by najpierw sprawdzać czy pierwsze zapytanie zwraca wynik puty, a jeśli tak to dane pobiera z 2 zapytania?

Dzięki za pomoc.
franki01
Sprobuj w warunkach petli zamiast NULL, wstawic false, bo raczej taka wartosc jest zwracana w przypadku porazki.

EDIT: W dwoch petlach, zebys nie przeoczyl smile.gif
Hazel
  1. <?php
  2. $result = $conn->query($query_str);
  3. if ($result->num_rows())
  4. {
  5. while ($row = $result->fetch_assoc())
  6. {
  7. // zapytanie pierwsze nie jest puste
  8. }
  9. }
  10. else 
  11. {
  12. $result1 = $conn->query($query_str1);
  13. while ($row1 = $result1->fetch_assoc())
  14. {
  15. // zapytanie pierwsze jest puste, wiec wykonuje się drugie
  16. }
  17. }
  18. ?>

jeśli dobrze zrozumiałem.
Cezar708
Cytat(franki01 @ 3.01.2008, 16:18:35 ) *
Sprobuj w warunkach petli zamiast NULL, wstawic false, bo raczej taka wartosc jest zwracana w przypadku porazki.

EDIT: W dwoch petlach, zebys nie przeoczyl smile.gif

.. to po pierwsze a
po drugie trochę zakręciłaś z tymi pętlami,
po trzecie nie masz poprawnego warunku w trzeciej pętli, przez co się pewnie zapętla skrypt,

lepiej spróbuj tak, jest szybciej i czytelniej:
  1. <?php
  2. //jeżeli pierwsze zapytanie nie zwróciło pustego wyniku
  3. $isFirstResult = false;
  4. while(($row_data = $result->fetch_assoc()) !== false)
  5. {
  6. $isFirstResult = true;
  7. //tutaj instrukcje
  8. }
  9. //jeżeli pierwsze zapytanie zwróciło pusty wynik
  10. if ( !$isFirstResult ){
  11. while( ($row_data1 = $result1->fetch_assoc()) !== false ){
  12.  //tutaj instrukcje
  13. }
  14. }
  15. ?>
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.