Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][PHP] Masowe usuwanie z bazy.
Qbexus
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Znacie jakąś klasę, skrypt do masowego usuwania z bazy rekordów zawierających jakąś frazę?
Np. mam w tablicy zestaw słów typu sex, porn itp. i chcę teraz usunąć z bazy wszystkie rekordy z tabeli 'zwroty'
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
kadlub
post
Post #2





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


delete from zwrot where pole_z_tabeli LIKE '%sex%' or pole_z_tabeli LIKE '%porn%'

Ten post edytował kadlub 8.06.2011, 17:37:06
Go to the top of the page
+Quote Post
toaspzoo
post
Post #3





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Kod
DELETE FROM `tabela` WHERE `kolumna` = 'wartosc'

albo z LIKE

Kod
DELETE FROM `tabela` WHERE `kolumna` LIKE  '%wartosc%'
Go to the top of the page
+Quote Post
Qbexus
post
Post #4





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Dzięki niby coś tak kombinowałem i mi nie działało już myślałem, że like nie działa przy delete ale jest ok. Jest jakiś naprawdę dobry kurs sql pod php online czy lepsza jakaś książka? Muszę się podszkolić.

Edit: a da si do tego jakoś wstawić implode jak tu? http://forum.php.pl/index.php?s=&showt...st&p=842022 czy tam frazy po przecinku?

Ten post edytował Qbexus 8.06.2011, 18:14:06
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Dla wartości z porównaniem wartości w kolumnie można użyć Where kolumna IN (po przecinku słowa), ale z LIKE już tego się nie uzyska. Można próbować regexp, ale to będzie masakra dla bazy.
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Można zamiast przecinka dać "OR" i masz tyle LIKE'ów ile chesz.
Domyślam się, że jest to operacja wykonywana raz na jakiś czas w celu oczyszczenia zawartości dlatego optymalizacja nie jest tu priorytetem.
Go to the top of the page
+Quote Post
Qbexus
post
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Tak zgadza się w tym przypadku optymalizacja nie ma priorytetu ale przy okazji chciałem pogłębić temat. Dzięki wszystkim. Jeszcze jedno, da się sprawdzić czy dana operacja coś osunęła? Niezależnie od tego czy coś zostało usunięte z bazy czy nie dostaję true. A jak bym chciał sie dowiedzieć ile elementów zostało usuniętych?

Ten post edytował Qbexus 9.06.2011, 10:25:46
Go to the top of the page
+Quote Post
markonix
post
Post #8





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Tak - mysql_affected_rows.
Go to the top of the page
+Quote Post
Qbexus
post
Post #9





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Niestety dostaje w wyniku Warning: "Warning: mysql_affected_rows() [function.mysql-affected-rows]: A link to the server could not be established in /home/qbexus/domains/......" Kod jest taki
  1. $wynik = $db->query($sgl);
  2. echo $fraza.' - '.$wynik.'<br \>';
  3. printf("Records deleted: %d\n", mysql_affected_rows());
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 14:19