wpaski
9.09.2014, 09:54:40
Czy jest możliwe napisananie zapytania, które "wisi" ?
cos w stylu:
WHILE 1=1
SELECT * FROM `test` WHERE true
w samym sql'u
nospor
9.09.2014, 09:58:38
Napisz poprostu co chcesz osiągnąć, a nie kombinujesz jak kon pod gorke
wpaski
9.09.2014, 10:02:32
chce zeby zapytanie wisiało, zebym mogl sobie je ubić kiedy chce, np w 30 sekundzie. bez wypelniania tabeli mnostwem danych
nospor
9.09.2014, 10:03:38
A teraz wytlumacz jeszcze raz, tak na spokojnie. Pomysl sobie, ze czytajacy nie siedzi w Twojej glowie i nie rozumie Twoich skrotowych mysli.
wpaski
9.09.2014, 10:06:32
hmm, no załóżmy jest baza z milionem rekordów danych, jakieś zapytanie na tej bazie wykonuje sie powiedzmy 5 sekund, ja chcę "imitować" taką dużą bazę, a raczej zapytanie które "wisi" wyszukując rekordy w takiej ogromnej bazie (jest wyświetlane na liście procesów bazy MySQL), chce żeby ono wisiało bez posiadania tak wielkiej bazy, czyli napisać zapytanie co zadziała na małej bazie z 10 rekordami a będzie się wykonywac długo - tyle ile chce. Nie potrafie tego lepiej wyjaśnić

Także jeśli to nie rozjaśnia sprawy to się poddaje
nospor
9.09.2014, 10:09:59
Ok, teraz jest już jaśniej

Napisz mi tylko proszę po co ci coś takiego? Prowadzisz jakies teksty wydajnosciowe? Cos innego?
Zas co do samego pytania, to tworzysz procedure z petlą a wtej petli twoje zapytanie
http://dev.mysql.com/doc/refman/5.0/en/while.html
wpaski
9.09.2014, 10:25:05
dzięki, no własnie już próbowałem z procedurą i właśnie z tym przykładem ale chyba coś robię źle, takie coś wklepuje w phpmyadminie:
CREATE PROCEDURE dowhile()
BEGIN
WHILE 1=1 DO
SELECT * FROM `test` WHERE 1
END WHILE;
END;
call dowhile();
a czemu takie cos robię, bo potem chcę napisac skrypt który by ubijał takie zapychające baze zapytania, dlatego potrzebne mi jedno zapytanie które się nie kończy, pewnie prosty błąd bo wczesniej nic z procedurami nie robilem:
Kod
#1064 - 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 'PROCEDURE dowhile()
nospor
9.09.2014, 10:30:06
A gdzie ty odpalasz to zapytanie?
wpaski
9.09.2014, 10:52:18
dzięki, czyli trzeba w konsoli, inaczej się nie da, pozdrawiam:)
nospor
9.09.2014, 10:54:33
Da sie wszedzie, tylko w zaleznosci od tego gdzie to odpalasz, to trzeba to zrobic w specjalny sposob. Dlatego zadalem proste pytanie: gdzie to odpalales ze miales ten blad.
wpaski
9.09.2014, 11:07:01
w phpmyadminie, ale masz rację, da się, tylko trzeba pamiętać o ustawieniu: DELIMITER // a potem spowrotem na ";"
mimo wszystko nie uzyskałem tego efektu jaki chciałem

ponieważ zapytanie wykonuje sie wkółko(trwa kilka milisekund) a nie w sposób ciągły, czyli nie ma tej "imiacji" dużej bazy danych
nospor
9.09.2014, 11:08:28
No zapytanie bedzie sie wykonywalo w petli non stop od poczatku do konca. Wykona sie raz, potem wykona sie drugi raz, potem wykona sie trzeci raz itd.
wpaski
9.09.2014, 11:10:06
no właśnie, a ja chciałem, żeby wykonało sie raz i trwało trwało i trwało.
nospor
9.09.2014, 11:22:57
No jak moze trwac i trwac skoro gdy doleci do konca to jest koniec i kropka. Jak ma trwac cos co sie juz skonczylo?? Przeciez to nie ma zadnego sensu.
Jak tak ci zalezy na tym, to wrzuc do tej tabeli petryliard rekordow i bedzie ci trwalo dluzej
wpaski
9.09.2014, 11:25:33
no wiem ale myślałem, że można jakos to zrobić bez wypełniania tabeli petryliardem rekordów, ok no to koniec tematu
kosmos
9.09.2014, 12:36:57
nospor
9.09.2014, 12:41:40
kosmos co ma PHPowy sleep do zapytania mysql? NIC.
Ale juz sleep mysqlowy moze pomóc
SELECT SLEEP(5), test.* FROM test
kosmos
9.09.2014, 12:41:46
nospor
9.09.2014, 12:45:04
waitfor tez sie tutaj na nic nie zda... przeczytaj pare ostatnich postow od pojawienia sie procedury w tym temacie.
Dodanie sleep() do zapytania mysql moze rozwiązac problem. Podalem przyklad w poprzednim poscie. Watek mysql bedzie wisial ciagle na tym zapytaniu. NIe będą jednak pożerane zasoby procesora
phpion
9.09.2014, 12:45:21
No to upewnij się, że dotyczy to MySQL. Bo nie dotyczy.
kosmos
9.09.2014, 12:50:42
a coś takiego?
SELECT name, surname FROM X WHERE name ='joe' AND surname='buzer' WAITFOR DELAY '00:00:20'
przyznacie, że mimo wszystko nakierowałem w temacie
nospor
9.09.2014, 12:51:39
Zrozum, ze w mysql nie ma waitfor...
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.