Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Losowe Kasowanie
codo
post 25.09.2005, 08:46:11
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 31.10.2004

Ostrzeżenie: (0%)
-----


Witam, czy jest mozliwe losowe skasowanie np. polowy zawartosci tabeli bez uzycia php?
Go to the top of the page
+Quote Post
TomASS
post 25.09.2005, 09:51:42
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Wg mnie jest możliwe:

Zrobić tabelę tymczasową z wylosowanymi rekordami i później usunąć wszystkie rekordy wylosowane z tabeli nietymczasowej, coś ala:
Cytat
CREATE TEMPORARY TABLE tmptable
SELECT A.* FROM table1 AS A, table1 AS B
WHERE A.username LIKE '%2'
AND A.ID = B.ID
AND A.username <> B.username;

DELETE table1 FROM table1
INNER JOIN tmptable
ON table1.username = tmptable.username;

cytat z MySQL reference

Raczej nie uda się poprzez podzapytanie, ponieważ:
Cytat
you cannot delete from a table and select from the same table in a subquery.


Pozdrawiam


--------------------
Go to the top of the page
+Quote Post
mike
post 25.09.2005, 10:45:28
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


To, że nie da się użyć podzapytania to już wyjaśnił @TomASS, ale ja bym tutaj nie uciakał od php bo będzie bardzo pomocne i nie będzie trzeba robić akrobatycznych wyczynów z tabelą pomocniczą.

1. Pobieramy liczbe rekordów w tabeli:
  1. SELECT COUNT(*)
  2. FROM tabela;

2. Pobieramy ten wynik w php i dzielimy go na dwa; mamy teraz zmienną $limit;
3. Wykonujemy zapytanie:
  1. <?php
  2. mysq_query( 'DELETE FROM tabela ORDER BY RAND() LIMIT ' . $limit );
  3. ?>


Tak więc zastanów sie czy na pewno chcesz uciec od php w tej sytuacji.
Go to the top of the page
+Quote Post
TomASS
post 25.09.2005, 10:48:16
Post #4





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


No tak, tylko że nie będzie to losowe skasowanie :/ Aczkolwiek pomysł bardzo dobry jeśli chodzi o skasowanie połowy.

Ten post edytował TomASS 25.09.2005, 10:48:33


--------------------
Go to the top of the page
+Quote Post
mike
post 25.09.2005, 11:12:04
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(TomASS @ 2005-09-25 11:48:16)
No tak, tylko że nie będzie to losowe skasowanie :/ (...)

Jak to nie :?:
Gwarantuje mi to RAND() użyte w klauzuli ORDER BY

Jedynym ograniczeniem może być wersja MySQL'a:
Cytat
ORDER BY can be used with DELETE beginning with MySQL 4.0.0.
Zdarza się że jeszcze ludzie mają starszego niż 4.0.0
Go to the top of the page
+Quote Post
codo
post 25.09.2005, 19:23:58
Post #6





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 31.10.2004

Ostrzeżenie: (0%)
-----


Super, swietne i bardzo szybkie rozwiazanie. Thx

----edit----
Jo łelkam smile.gif
~mike_mech
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 06:27