Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowe Kasowanie
Forum PHP.pl > Forum > Bazy danych
codo
Witam, czy jest mozliwe losowe skasowanie np. polowy zawartosci tabeli bez uzycia php?
TomASS
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
mike
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.
TomASS
No tak, tylko że nie będzie to losowe skasowanie :/ Aczkolwiek pomysł bardzo dobry jeśli chodzi o skasowanie połowy.
mike
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
codo
Super, swietne i bardzo szybkie rozwiazanie. Thx

----edit----
Jo łelkam smile.gif
~mike_mech
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.