Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze sprawdzeniem wyniku w bazie danych
Forum PHP.pl > Forum > Bazy danych > MySQL
chemar
Mam taki kod

  1. <?php
  2. require_once("database_connection.php");
  3.  
  4.  
  5. $xml = simplexml_load_file('plik'.date('Ymd').'.xml');
  6.  
  7.  
  8. foreach ($xml->oferta as $produkt) {
  9.  
  10. $wynik = mysql_query("SELECT id_produkt FROM produkt WHERE id_produkt=".$produkt->id."") or die(mysql_error());
  11. while ($rekord = mysql_fetch_assoc($wynik))
  12. {
  13. if($rekord['id_produkt'] == $produkt->id)
  14. {
  15. echo $rekord['id_produkt']." - $produkt->id - JEST<br />";
  16. } else {
  17. echo $rekord['id_produkt']." - $produkt->id - NIE MA<br />";
  18. }
  19. }
  20. }
  21. ?>


dlaczego ten kod mi nis sprawdza poprawnie wywala mi tylko te rekordy które są w bazie a tych których nie ma nie wywala wogóle a wiem an pewno, że w pliku xml są rekordy których nie ma w bazie. Jak mogę osiągnąć wynik taki, że jeżeli id z xml istnieje w bazie to wywala komunikat że istnieje a jeżeli nie to że nie istnieje

próbowałem także w taki sposób

  1. if(mysql_num_rows($wynik)==0)
  2. {
  3. //istnieje
  4. } else {
  5. //nei istnieje
  6. }


jednak to też nei działało.
krispak
Slabo zapoznales sie z petlami.. W petli while jezeli warunek jest niespelniony to petla nie wykona sie ani razu, w przeciwienstwie do - do while. Wywal warunek where i sprawdzaj jak teraz w petli.
Pozdrawiam
chemar
Niestety takie rozwiązanie też mnie nie ratuje ponieważ jest dużo danych i skrypt nie zdąży wykonać się nie pomaga też set_time_limit(300); z żadnymi wartościami.
Może jakieś inne wyjścia na sprawdzenie tego co chę. bo jakoś nie mogę sobie poradzić.
Teraz mam tak:
  1. <?php
  2. require_once("database_connection.php");
  3.  
  4.  
  5. $xml = simplexml_load_file('plik'.date('Ymd').'.xml');
  6.  
  7.  
  8. foreach ($xml->oferta as $produkt) {
  9.  
  10. $wynik = mysql_query("SELECT id_produkt FROM produkt") or die(mysql_error());
  11. while ($rekord = mysql_fetch_assoc($wynik))
  12. {
  13. if($rekord['id_produkt'] == $produkt->id)
  14. {
  15. echo $rekord['id_produkt']." - $produkt->id - JEST<br />";
  16. } else {
  17. echo $rekord['id_produkt']." - $produkt->id - NIE MA<br />";
  18. }
  19. }
  20. }
  21. ?>


i niestety nie dizała to tak jak potrzeba raz, że skrypt przerywa działanie po uplywie jakiegoś czasu a dwa w NIE MA wyświetla mi takie rekordy które są czyli taki sam rekord jest w JEST jak i w NIE MA

Dobra temat do zamknięcia całkowicie, źle to robiłem.
mkozak
Bo puszczasz zapytania w pętli i to głupie zapytania.

Błąd nr 1
Za każdym razem pobierasz wszystkie produkty i jedziesz po liście (np 1000 rekordów) i szukasz id_produkt, zamiast do zapytania wpisać warunek

  1. "SELECT id_produkt FROM produkt WHERE id_produkt = $produkt->id


Ale to i tak będzie beznadziejne rozwiązanie, bo zmniejszy jedynie szybkość pozyskiwania danych i ich przeszukiwania, ale nadal wykonujesz to zapytanie dla wszystkich produktów w xml-u.

Jeżeli masz w xml mniej niż 1000 produktów to polecam:

  1. <?php
  2. require_once("database_connection.php");
  3.  
  4.  
  5. $xml = simplexml_load_file('plik'.date('Ymd').'.xml');
  6.  
  7. $t_idki = array();
  8. foreach ($xml->oferta as $produkt) {
  9. $t_idki[] = $produkt->id;
  10. }
  11.  
  12. $wynik = mysql_query("SELECT id_produkt FROM produkt where id_produkt in (".implode(',',$t_idki).")") or die(mysql_error());
  13.  
  14. ?>


W wyniku dostaniesz tylko te, które są w bazie

Jeżeli masz więcej id-ków w xml niż 1000 to pobierz listę produktów raz do tabeli (na początku skryptu), a później sprawdzaj już w foreach-u np. za pomocą funkcji in_array.

  1. <?php
  2. require_once("database_connection.php");
  3.  
  4.  
  5. $xml = simplexml_load_file('plik'.date('Ymd').'.xml');
  6.  
  7.  
  8. $wynik = mysql_query("SELECT id_produkt FROM produkt") or die(mysql_error());
  9. while ($rekord = mysql_fetch_assoc($wynik))
  10. {
  11. $t_produkty[] = $rekord['id_produkt'];
  12. }
  13.  
  14. foreach ($xml->oferta as $produkt) {
  15. if(in_array($produkt->id,$t_produkty))
  16. {
  17. echo $rekord['id_produkt']." - $produkt->id - JEST<br />";
  18. } else {
  19. echo $rekord['id_produkt']." - $produkt->id - NIE MA<br />";
  20. }
  21. }
  22. ?>
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.