Czyszczenie zbędnych rekordów [SQL]
DB
15.08.2009
delete * from `dbmod_tablet` where sid != ( select * FROM `dbmod_tablet` WHERE sid = ( SELECT sid FROM `dbmod_tablet` WHERE exp>100 ) )
DB
15.08.2009
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
Portek
15.08.2009
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.
DB
15.08.2009
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
Portek
16.08.2009
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
DB
16.08.2009
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.
Seba 18.08.2009
DB
18.08.2009
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
Seba 20.08.2009
Bo nadal jak patrze na ten pierwszy post, to zapytanie Portka pasuje.
DB
20.08.2009
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
DB
20.08.2009
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.
Miczu
20.08.2009
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.