Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie realizuje zapytań.Wina wielkiej ilości
Forum PHP.pl > Forum > Bazy danych > MySQL
gump
Witam ponownie,

Tym razem zapytanie moje brzmi: Czy to mozliwe, ze mysql nie realizuje zapytania do bazy ze wzgledu na duuuza liczbe rekordow w tabeli?

Mam 3 tabele:
- odbiorcy: numer odbiorcy, jego dane, miejsce rejestracji (0 - filia "1", 1 - filia "2");

- faktury: numer faktury, odbiorca, miejsce wystawienia f-ry (0 lub 1, jak wyzej);

- dokumenty: wszystkie pozycje dokumentow, takze faktur, powiazane numerem odbiorcy i faktury. rowniez zawieraja dane dot. miejsca wystawienia dokumentu.

Miejsce wystawienia dokumentu jest tu szczegolnie wazne. Numery dokumentow bowiem moga sie powtarzac, poniewaz w filii 1 i w filii 2 konkretnej firmy numeracja jest niezalezna. Sa wiec dwie faktury o numerze 1/03 i tak dalej. Wyroznikiem jest wiec wtedy miejsce wystawienia.

Skrypt ma za zadanie syntetyczne podsumowanie faktur.

Kod wyliczający odbiorców spełniających kryterium KODODB (region) działa bez zarzutu i wygląda tak.
[php:1:b393cb301e]
$odbiorcy_spis=mysql_query("SELECT * FROM odbiorcy WHERE KODODB='$kod' ORDER BY MIASTO ASC ");
while ($odbiorca=mysql_fetch_array($odbiorcy_spis)) {
[/php:1:b393cb301e]

Następnie dla każdego odbiorcy skrypt wylicza faktury, ktore zawieraja dany numer odbiorcy ($odbiorca[0]) i jego miejsce rejestracji PLACE ($odbiorca[26] = 0 lub 1).

[php:1:b393cb301e]
$spis_faktur=mysql_query("SELECT * FROM faktury WHERE ID_O='$odbiorca[0]' AND PLACE='$odbiorca[26]' ");
while ($faktura=mysql_fetch_array($spis_faktur)) {
[/php:1:b393cb301e]

Teraz skrypt powinien wyliczyć dla każdej faktury pozycje dokumentu, zawarte w tabeli dokument. Wiązanie odbywa się na podstawie typu dokumentu faktury (V - faktura Vat, K - korekta), numeru "wuzetki" (dokumentu magazynowego, ktory zawarty jest zarowno w tabeli faktury jak i w tabeli dokument przy kazdej pozycji), oraz miejsca jej wystawienia.

[php:1:b393cb301e]
$rodzaj_faktury="$faktura[5]";
$nr_wz="$faktura[6]";
$miejsce_sprzedazy=$faktura[48];

$pozycje_z_faktury=mysql_query("SELECT * FROM dokument WHERE FAK='$rodzaj_faktury' AND PLACE='$miejsce_sprzedazy' AND NR_DOK='$nr_wz') ");

while ($pozycja=mysql_fetch_array($pozycje_z_faktury)) {
# RESZTA KODU WYŚWIETLAJĄCA POZYCJE DOKUMENTU ITP.
[/php:1:b393cb301e]

Problem tkwi w tym, iz skrypt w ogole nie interesuje sie zapytaniem $pozycje_z_faktury. Nawet gdy zmienie nazwe tabeli dokument na na przykład "dupa" to nawet nie wyswietli komunikatu, ze "Supplied argument is not a valid MySQL result resource "...

Co zrobić? Jestem w potrzasku.... Czy może to wynikać z dużej ilości rekordów w tabeli dokument (prawie 200.000 )? Nie sądze, aczkolwiek... kto wie...

Będę bardzo wdzięczny za pomoc!

Pozdrawiam,
Michał S.
uboottd
Jestes pewien ze ta druga petla w ogole sie wykonuje ?

Bardzo nie zalecam Ci stosowania konstrukcji SELECT * FROM w polaczeniu z $wiersz_z_tabeli[numer_kolumny] - prowadzi to od razu do rozjadu pomiedzy tym co chesz uzyskac, a tym co uzyskujesz. MySQL _NIE_ gwarantuje kolejnosci zwracania kolumn. Uzywaj nazw kolumn.
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.