![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 24.06.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mam taki kod...
Niby nic skomplikowanego...
Dodam że $kol może mieć wartość co najwyżej 3... Więc razem powinno wygenerować max 12 zapytań. Dlatego, że przy $kol=3 , zapytanie $zo1=mysql_query("select * from prod where nazwa='".$nazwa."'"); też zwróci 3 rekordy Więc za 1 obrotem for wykona 3 zapytania z pętli while (albo insert albo update w zależności od warunku if)... Moje pytanie brzmi: czy i jak można zoptymalizować tą pętle, żeby generowała jak najmniej zapytań do bazy? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cos kiepsko liczysz.
Na samym początku daj: $i = 0; A nastepnie po kazdym, dosłownie po kazdym mysql_query() daj $i++; A na koncu daj echo $i; Ile wyswietla? 12? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 24.06.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
hmm dziwne wyskakuje mi 10 przy 3 produktach:
efekt: jestem w for - 1 jestem w while - 2 jestem w ifie spełniającym warunek - 3 jestem w for - 4 jestem w while - 5 jestem w ifie spełniającym warunek - 6 jestem w for - 7 jestem w while - 8 jestem w ifie spełniającym warunek - 9 jestem w for - 10 Suma: 10 nie wygląda to na straszną liczbę... hmm nie wiem co może powodować przekraczanie limitów... Tym bardziej że na stronie jest max 2 userków... a najczęściej 1 ![]() Ten post edytował poczatkujaca12 24.06.2010, 14:51:06 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Zapytania w pętli = zuo.
Poczytaj o indeksie UNIQUE i ON DUPLICATE KEY UPDATE. Trzy zapytania zmienią się magicznie w jedno. A jak się bardziej postarasz (posklejasz tę tablicę w odpowiednie WHERE), to podejrzewam, że całość zamknie się w jednym zapytaniu. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 24.06.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
tylko akurat w tej tabelce pola id_user ani plik nie mogą być unique
chyba, że istnieje możliwość, żeby zrobić te 2 pola razem na unikalne bo moze byc: id_user 1 plik abc.txt id_user 1 plik nazwa.pdf id_user 2 plik nazwa.pdf Ale jak już istnieje id_user 1 plik nazwa.pdf to drugi raz takiego rekordu dodać nie może. Ten post edytował poczatkujaca12 24.06.2010, 21:10:17 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat tylko akurat w tej tabelce pola id_user ani plik nie mogą być unique chyba, że istnieje możliwość, żeby zrobić te 2 pola razem na unikalne Sprawdź, potem pogadamy. ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 24.06.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Z tego co znalazłam to te UNIQUE i ON DUPLICATE KEY UPDATE tyczą się tylko jednej wybranej kolumny...
chciałam wybrać id i po tym zaktualizować, ale i tak dodało kolejny rekord. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
co tak w ogóle ma robić to?
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Z tego co znalazłam to te UNIQUE i ON DUPLICATE KEY UPDATE tyczą się tylko jednej wybranej kolumny... Z tego, co pamiętam, to jak każdy inny indeks można nakładać. Zawsze możesz zrobić z danych CRC32 (szybkie) i będziesz miał jedną kolumnę na indeks. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 24.06.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
ok, z tym CRC podpowiedziałeś mi coś chyba podobnego i zrobiłam klucz który łączy te 2 kolumny... jej zawartość:
'id_userNazwa.pliku' i jest on unikalny jednak nie aktualizuje mi danych... mam zapytanie: Kod insert into down (id_prod, id_user, plik, crc, koniec, pobran) values ('bzdury', '1', 'bz.php', '1bz.php', koniec=DATE_FORMAT(TIMESTAMPADD(DAY,+7,now()), '%Y-%m-%d'), pobran='20') ON DUPLICATE KEY UPDATE crc=VALUES(crc) OK nie dodaje nowego rekordu, ale też nie aktualizuje istniejącego... Na pytanie co to ma robić:
Generalnie jest to do pobierania i generowania unikalnych linków do określonego pliku. Dany użytkownik może ściągnąć plik max X razy, i link jest aktywny X dni. hmm pytanie czy zapytanie z ON DUPLICATE KEY UPDATE rzeczywiście coś optymalizuje... Bo w moim przypadku w pętli while wykonuja sie 2 zapytania... jedno wybierające a drugie od warunku dodające lub aktualizujące... a znalazłam, że ON DUPLICATE KEY UPDATE generuje 2 zapytania do bazy - pierwsze dodające i drugie [jeżeli wpis istniał] aktualizujące [tak zrozumiałam]... więc pozbywam się selecta i warunków [2 zapytań]... zamieniam na jedno zapytanie, generujące 2 zapytania do bazy z ON DUPLICATE KEY UPDATE?? => http://forum.php.pl/index.php?showtopic=94...rt=#entry566638 Ten post edytował poczatkujaca12 25.06.2010, 00:48:38 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
a nie lepiej to będzie sprawdzać przed wygenerowaniem linka ? tzn koleś wchodzi na podstronę gdzie jest ten link i na początku zostaje sprawdzany. wtedy liczba zapytań znacząco się zmniejszy bo nie każdy link będzie aktualizowany (tylko wtedy jak ktoś wejdzie)
czyli ostatecznie wyglądałoby to tak:
oczywiście trzeba dostosować to do podstrony mam nadzieje, że rozumiesz mój przekaz ![]() Ten post edytował sebekzosw 25.06.2010, 09:15:54 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat a znalazłam, że ON DUPLICATE KEY UPDATE generuje 2 zapytania do bazy - pierwsze dodające i drugie [jeżeli wpis istniał] aktualizujące [tak zrozumiałam]... więc pozbywam się selecta i warunków [2 zapytań]... zamieniam na jedno zapytanie, generujące 2 zapytania do bazy z ON DUPLICATE KEY UPDATE?? Nie pamiętam szczegółów, ale nawet jeśli, to te dwa zapytania są już realizowane bezpośrednio przez DBMS, czyli z pominięciem wyciągania jakichkolwiek danych do front-endu (czyli do PHP). A jak nazwa wskazuje, UNIQUE jest indeksem, czyli sprawdzenie danej wartości jest ułamkiem sekundy. Generalnie lepiej jest obarczać takimi zadaniami bazę danych, oczywiście w granicach rozsądku, ale IMHO Twoja sytuacja jest tą właściwą. ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 24.06.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Znalazłam
![]() Okazało się, że problem nie leżał w pętli... tzn nie tej ![]() W kolejnym etapie miałam błąd w pliku odpowiadający za ściąganie pliku przez usera... udało się naprawić [pierdółka - takie błędy są najgorsze], po czym okazało się, że w ogóle to jest nie potrzebne [bo zupełnie zrezygnowałam z tego rozwiązania ![]() I dzięki za pomoc ![]() Ten post edytował poczatkujaca12 25.06.2010, 21:44:31 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 12:45 |