![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam posiadam skrypt, który po przeglądnięciu pętli ma zapisać niektóre dane do bazy:
Zwraca: Kod zapyrania: UPDATE `riders` SET `is`=`is`+1, `xp`=`xp`+0.02 WHERE `id`=5369;UPDATE `riders` SET `is`=`is`+1, `xp`=`xp`+0.02 WHERE `id`=4211;UPDATE `riders` SET `is`=`is`+1, `xp`=`xp`+0.02 WHERE `id`=12234;UPDATE `riders` SET `is`=`is`+1, `xp`=`xp`+0.02 WHERE `id`=9563; err: 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 'UPDATE `riders` SET `is`=`is`+1, `xp`=`xp`+0.02 WHERE `id`=4211;UPDATE `riders` ' at line 1 Zrobiłem echo, żeby przetestować wykonanie zapytania w PhpMYAdminie, ale tam pisze jasno: Zapytanie SQL wykonano pomyślnie! Zapytanie kopiuje bezpośrednio z tego co mi strona wyświetla i wklejam w pma i wykonuje a na stronie dziwny błąd ;/ Miałem po przedno te zapytania an tablicach, na końcu implode i to samo było ;( Nie wiem co robić ;/ |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 69 Dołączył: 23.10.2004 Skąd: Oświęcim Ostrzeżenie: (0%) ![]() ![]() |
Z poziomu PHP możesz wykonać tylko jedno zapytanie za pomocą jednego "mysql_query()".
Ten post edytował ADeM 10.01.2011, 23:29:12 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hmmm... dziwne kumpel wykonuje tak multum zapytań, ja sam używam do inserow jednego zapytania. To jakim cudem dziala w PMA ? a jak to zrobić, aby było szybko i zżerało mało pamieci
![]() Ten post edytował stefik4 10.01.2011, 23:37:15 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 69 Dołączył: 23.10.2004 Skąd: Oświęcim Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem jak to jest w PMA. Być może rozdziela sobie po prostu zapytania średnikiem i wykonuje każde osobno.
Jeśli Twój kumpel tak wykonuje, to niech pokaże Ci kod ;-) Jeśli $eeee i $aga w każdym przypadku jest takie samo, to lepiej będzie zrobić:
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
NO tak w tym przypadku akurat właśnie wpadlem na to samo. ale w innym miejscu, gdy rożne rzeczy sa updejtowane to każde zapytanie musze osobno robic ? Jak moge to zrobic najszybeij?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 69 Dołączył: 23.10.2004 Skąd: Oświęcim Ostrzeżenie: (0%) ![]() ![]() |
Jedyne wyjście, to każde osobno. Ewentualnie pokaż co chcesz osiągnąć, to może coś zdziałamy ;-)
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ok poradziłem sobie z tym, zrobiłem tak jak pisałeś `id` IN ...
a inne mam tak:
I dałoby rade to wykonywać raz w czasie wykonania skryptu, bo obecnie jak mam np 25 meczy wykonywanych x 4 to jest 100 takich zapytań update ;/ Ten post edytował stefik4 11.01.2011, 00:06:29 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 69 Dołączył: 23.10.2004 Skąd: Oświęcim Ostrzeżenie: (0%) ![]() ![]() |
Być może dałoby się to w jednym zapytaniu zrobić. Pokaż skąd dokładnie się bierze $pkt.
-------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 2 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
hmmm a może być w 2 zapytaniach
![]() tylko template tabelka potrzebna pakujesz do templatki zmiany i id z tego co pamietam takie coś powinno dać radę
analogicznie do reszty w zasadzie 3 bo jeszcze zostaje czyszczenie temp'a Ten post edytował Hoku 11.01.2011, 00:56:04 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Z poziomu PHP możesz wykonać tylko jedno zapytanie za pomocą jednego "mysql_query()". odsylam do manuala oraz proponuje zorientowac sie w skladni SQL. Zakladam, ze jako "1 zapytanie" uznales 1 operacje na bazie. Cytat Hmmm... dziwne kumpel wykonuje tak multum zapytań Za pomoca 1 mysql_query wykonuje (na ta chwile) 9208 zapytan (wedluj powyzej przyjetej definicji). Sposob na to jest prosty: oddielic zapytania separatorem Cytat Jedyne wyjście, to każde osobno. Bzdura. Syntax error to nic innego, jak blad skladniowy.
Ten post edytował lukaskolista 11.01.2011, 08:19:21 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@lukaskolista możesz pokazać swoje 9208 zapytan ktore wykonujesz przy pomocy jednego mysql_query? Jestem tego bardzo ciekaw
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
UPDATE ...; UPDATE ...; UPDATE ...; wybacz, ale nie wkleje tu wszystkich.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 69 Dołączył: 23.10.2004 Skąd: Oświęcim Ostrzeżenie: (0%) ![]() ![]() |
A możesz pokazać dokładnie tak, jak tego używasz?
Np.: -------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 2 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
A możesz pokazać dokładnie tak, jak tego używasz? Np.: podobno jest jakaś flaga do tego patrz dokuemntacja komentarze gdzies na gorze i podobno mysqli ma multi query dozwolone |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 69 Dołączył: 23.10.2004 Skąd: Oświęcim Ostrzeżenie: (0%) ![]() ![]() |
Przeglądnąłem wszystkie komentarze w manualu pobieżnie i nie znalazłem nigdzie żadnego wykonania kilku zapytań w jednym mysql_query. Ponadto jeden wpis traktuje o tym, że w dokumentacji niemieckiej brakuje zaznaczenia, że nie można wykonywać wielu zapytań przy jednym użyciu funkcji.
-------------------- |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
To już całkowicie nie wiem jak to ma być. Zastosowałem tego UPDATE z WHERE `id` IN ..., bo w tym jednym momencie zapisuje te same rzeczy więc to mogę zastosować, ale w większości innych przypadków gdy aktualizuję tą samą tabelę, ale inne dane to na rękę mi by było zsumować zapytania i wykonać na końcu po pętlach. Obecnie mój skrypt pracuje tak:
Kod 2011-01-11 17:24:42 | czas:1.616| select: 92 | insert: 20 | update: 6 | suma: 118 | biegow:5 | MEM:0.786432 Taki wynik średnio mnie satysfakcjonuje, lecz jest to średni wynik, ale przy np 50 begach będzie się wykonywał 10 sek co już jest zagrożeniem dla przerwania wykonywania, lub przeciążenia serwera. |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 69 Dołączył: 23.10.2004 Skąd: Oświęcim Ostrzeżenie: (0%) ![]() ![]() |
Tak jak mówiłem wcześniej: powiedz dokładnie co chcesz osiągnąć i jak powstają dane, które są aktualizowane w bazie.
-------------------- |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Pętla pobiera zawsze tylko 4 rekordy bo taki jest LIMIT. Jak widać, za każdym razem zapisuje inne kolumny(`1m`,`2m`...) i inne dane $pkt. |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 2 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Przeglądnąłem wszystkie komentarze w manualu pobieżnie i nie znalazłem nigdzie żadnego wykonania kilku zapytań w jednym mysql_query. Ponadto jeden wpis traktuje o tym, że w dokumentacji niemieckiej brakuje zaznaczenia, że nie można wykonywać wielu zapytań przy jednym użyciu funkcji. Cytat Stratsimir Kolchevski 22-Jun-2009 12:51
The documentation claims that "multiple queries are not supported". However, multiple queries seem to be supported. You just have to pass flag 65536 as mysql_connect's 5 parameter (client_flags). This value is defined in /usr/include/mysql/mysql_com.h: #define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */ Executed with multiple queries at once, the mysql_query function will return a result only for the first query. The other queries will be executed as well, but you won't have a result for them. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 08:02 |