![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 30.06.2014 Ostrzeżenie: (0%)
|
Witam wszystkich,
mam problem z przeliczeniem duzej ilosci wierszy w bazie danych a dokladniej w tabeli : DokFin mam 50tys wierszy, Historiafin mam 60tys wierszy, Towary okolo 6 tys wierszy. potrzebuje program który pobierze mi w zaleznosci od dat ID dokumentu finansowego z DokFin, pozniej wyszuka to ID w tabeli HistoriaFin, następnie pobierze z HistoriaFin IDtowaru,cene zakupu i ilosc( cena i ilosc pomnoży i zapisze do zmiennej) a Id towaru wyszuka w tabeli Towary i pobierz idGrupy do której nalezy towar. Napisałem cos takiego :
Problem w tym gdy daty są np odlegle o 3 miesiace to program wykonuje to dłuzej niz 8000sekund.. Ktoś pomoże jak to rozwiazac? |
|
|
|
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
1) Do porownania konkretnej wartosci nie uzywa sie LIKE tylko =
2) To co tu wszystko masz, realizuje się jednym zapytaniem a nie petryliardem w petli jak masz teraz. Poczytaj o JOINach w mysql |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
Ten post edytował Turson 30.06.2014, 11:58:39 |
|
|
|
Post
#4
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
Podejrzewam, że IdDokFin jest integerem
|
|
|
|
Post
#6
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
A co ma piernik do wiatraka? Chodzi o to, ze zamiast $val ma byc nazwa kolumny z drugiego łączenia...
|
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
Aaa, myślałem że chodzi o brak '', a $val to jakaś zmienna z $_POST czy coś (IMG:style_emoticons/default/smile.gif)
Autor niech sam poprawi |
|
|
|
Post
#8
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Nie, nie jest tozmienna z post...z kodu widac wyraznie, ze jest to zmienna z petli po idkach.... a poto przeciez zrobiles złączenie by tej petli nie bylo, nieprawdaz?
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
Cytat myślałem że chodzi o brak '', a $val to jakaś zmienna z $_POST czy coś Może niejasno, ale napisałem, że myslałem iż $val to zmienna niepochodząca z zapytań, nieprawdaż? (IMG:style_emoticons/default/biggrin.gif) Ten post edytował Turson 30.06.2014, 11:48:17 |
|
|
|
Post
#10
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Dlatego wyprowadzilem Cię z błędu, nieprawdaż?
|
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
Tak, ale dwukrotnie. W poście #7 napisałem, że już wiem co to jest $val, ale źle zrozumiałeś i w poście #8 wytłumaczyłeś jeszcze raz, więc nie zrozumiałeś kontekstui mojej wypowiedzi.
Ale my mamy problemy (IMG:style_emoticons/default/smile.gif) |
|
|
|
Post
#12
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
(IMG:style_emoticons/default/smile.gif)
Nie mniej jednak mogles poprawić juz to zapytanie, skoro wiedzialec co jest czym. Autor nie koniecznie musi wiedziec co chciales tym zapytaniem osiągnąć i skoro juz mu dales gotowca, to moglby on byc poprawny. |
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 30.06.2014 Ostrzeżenie: (0%)
|
Dzięki bardzo za odpowiedź.
Próbuje na wszystkie sposoby mam coś takiego :
I dostaje błąd: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in ( wskazuje na linijke: while ($rekord = mysql_fetch_array($wynik)) ) |
|
|
|
Post
#14
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
|
|
|
|
Post
#15
|
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 30.06.2014 Ostrzeżenie: (0%)
|
Dzięki, problem był z złą nazwą tabeli
Ale dalej długo to trwa, jest mozliwosc jeszcze jakoś to poprawić? |
|
|
|
Post
#16
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
WHERE (DokFin.DataSprzedazy BETWEEN '2014-06-01' AND '2014-06-02') " ;
No i przydalby sie index na pole DataSprzedazy |
|
|
|
Post
#17
|
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 30.06.2014 Ostrzeżenie: (0%)
|
Zrobiłem wszystko jak pisałeś , jednak ten czas dalej taki sam.. (Historiamag zawiera 600tys wierszy,) macie jakieś jeszcze pomysly?
|
|
|
|
Post
#18
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Przy prawidlowym indeksie nie powinno byc takich problemow.
Pokaz jak wygląda akualne zapytanie oraz pokaz EXPLAIN z tego zapytania |
|
|
|
Post
#19
|
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 30.06.2014 Ostrzeżenie: (0%)
|
Nie wiem czy dobrze użyłem EXPLAIN(wstawiłem zamiast SELECT?)
Podaje kod jak wygląda:
oraz wynik EXPLAIN : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' HistoriaFin.ce_zn, HistoriaFin.Ilosc, Towary.IdGrupy FROM DokFin JOIN Histor' at line 1 Lub z PHPmyAdmin : Explain: id, select_type, table,type,possible_keys,key,key_len,ref,rows ,Extra 1,SIMPLE,DokFin,range,DataSprzedazy,DataSprzedazy,3,NULL,1053,Using where 1,SIMPLE,Towary,ALL,NULL,NULL,NULL,NULL,9214,,Using join buffer 1,SIMPLE,HistoriaFin,ALL,NULL,NULL,NULL,NULL,547551,Using where; Using join buffer Masz pomysl? |
|
|
|
Post
#20
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
Nie zamiast select a przed
|
|
|
|
![]() ![]() |
|
Aktualny czas: 21.12.2025 - 18:43 |