delete * from `dbmod_tablet` where sid != ( select * FROM `dbmod_tablet` WHERE sid = ( SELECT sid FROM `dbmod_tablet` WHERE exp>100 ) )
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Czyszczenie zbędnych rekordów [SQL]
#1
Napisano 15.08.2009 13:34
#2
Napisano 15.08.2009 13:46
DELETE * FROM `dbmod_tablet` WHERE exp < 100;
IP: ts3.cserwerek.pl
#3
Napisano 15.08.2009 14:48
drugie podzapytanie wyciąga rekordy z większym expem niż 100, pierwsze podzapytanie wyciąga te z mniejszą niż 100.
A główne usuwa pozostałe - czyli te w których wszystkie rekordy z pola exp dla danego sid mają wartość mniejszą niż 100
#4
Napisano 15.08.2009 15:22
A po co się w to bawić?drugie podzapytanie wyciąga rekordy z większym expem niż 100, pierwsze podzapytanie wyciąga te z mniejszą niż 100.
A główne usuwa pozostałe - czyli te w których wszystkie rekordy z pola exp dla danego sid mają wartość mniejszą niż 100
I o to i o to. W twoim przypadku zostaną skasowane rekordy które w tabeli mają exp powyżej 100 (a chodziło chyba o coś innego).Chodzi ci o odstęp czy o znak ? Bo jeśli o znak to trochę w twoim przypadku nie ma to sensu.
Moje zapytanie samo wybierze sobie rekordy z bazy i usunie je jeśli w tabeli exp będzie wynosił poniżej 100.
IP: ts3.cserwerek.pl
#5
Napisano 15.08.2009 19:11
Od końca zatem: podzapytanie 2 wybiera rekordy które mają większego expa niż 100, a pierwsze podzapytanie wyłącza pozostałe dla tego sid niezależnie od tego ile mają expa.
Następnie wszystkie które tych warunków nie spełniają są usuwane (czyli te które mają 8 klas z expem mniejszym niż 100)
Czyli jak ktoś ma na jednej postci 500 000 expa a na pozostałych nic to wywali mu wsystkie inne rekordy i zostawi tylko ten (tą postać) i nie będzie mógł expić bo plugin już ich nie stworzy - nie o to mi chodzi.Moje zapytanie samo wybierze sobie rekordy z bazy i usunie je jeśli w tabeli exp będzie wynosił poniżej 100.
Ma być tak że jeśli jedna z 8 klas ma więcej niż 100 to wszystkie 8 rekordów dla tego sid zostaje
#6
Napisano 16.08.2009 15:26
No tak o tym nie pomyślałem, w php może być? Jeśli chodzi o PAWNA, nie czuje się na siłach, w php coś wymodzę.Czyli jak ktoś ma na jednej postci 500 000 expa a na pozostałych nic to wywali mu wsystkie inne rekordy i zostawi tylko ten (tą postać) i nie będzie mógł expić bo plugin już ich nie stworzy - nie o to mi chodzi.
Ma być tak że jeśli jedna z 8 klas ma więcej niż 100 to wszystkie 8 rekordów dla tego sid zostaje
IP: ts3.cserwerek.pl
#7
Napisano 16.08.2009 16:46
Ja wymyśliłem takie zapytanie sql - chyba tak to najprościej nalezy zrobić ale nie wiem czemu nie działa - może ktoś zna się na tym lepiej i mnie poprawi.
#8
Napisano 18.08.2009 06:57
#9
Napisano 18.08.2009 09:32
Czyli jak ktoś ma na jednej postci 500 000 expa a na pozostałych nic to wywali mu wsystkie inne rekordy i zostawi tylko ten (tą postać) i nie będzie mógł expić innych postaci bo plugin już ich nie stworzy
i napisałem co potrzebuję.
Ma być tak że jeśli jedna z 8 klas ma więcej niż 100 to wszystkie 8 rekordów dla tego sid zostaje
#10
Napisano 19.08.2009 14:36
#12
Napisano 20.08.2009 13:25
Bo nadal jak patrze na ten pierwszy post, to zapytanie Portka pasuje.
#13
Napisano 20.08.2009 19:50
Uf...
Chcę jedynie wtedy usunąć rekordy dla `exp` <100 gdy ani jedna z 8 klas nie będzie miała expa więcej niż 100
Zapytania portka jest złe ponieważ jeśli ktoś będzie miał np na jednej klasie expa większego a na reszcie mniejsze niż 100 to usunie mu pozostałe klasy poza jedną - efekt będzie taki że nie możliwe będzie już expienie na pozostałych postaciach które zostały usunięte bo plugin nie odtworzy struktury bo dany sid już jest w bazie - co prawda tylko dla jednej klasy ale jest
#14
Napisano 20.08.2009 19:54
#15
Napisano 20.08.2009 20:03
http://i32.tinypic.com/2n00al4.png
A ten sytuację kiedy WSZYSTKIE mają zostać w bazie
http://i29.tinypic.com/34zby8l.png
Dlatego właśnie skorzystałem z tych podzapytań - drugie wyłącza z funkcji delete wszystkie które mają przynajmniej jedną klasę z większym expem a pierwsze dokłada do "wyłączonych" pozostałe rekordy (te z mniejszym expem od 100) dla tego SID tak aby "pełny zestaw" gracza pozostał w bazie.
#16
Napisano 20.08.2009 22:41
SELECT `nick`, MAX(`lvl`) FROM dbmod_tablet GROUP BY `nick`
O ile sie nie myle, to wypisze wszystkie sid, z ich najwiekszym lvl'em.
Przejechac po tych ponizej oczekiwan z deleta i powinno byc ok.
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych