Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> usuniecie maili onetu z bazy
1q2w3e4r
post 31.05.2012, 22:17:10
Post #1





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 6.05.2011

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


Potrzebuję efektywnego rozwiązania, które będzie szybko działać na dużej ilości danych.
Mam np. bazę maili, z której potrzebuje:
1. wydobyć maile onetu we wszystkich domenach
2. przefiltrowanie tej bazy aby nie zawierała maili z onetu
Tablica:
  1. $maile_onet = array('onet.pl', 'op.pl', 'poczta.onet.pl', 'onet.eu', 'onet.com.pl', 'vp.pl', 'spoko.pl', 'vip.onet.pl', 'autograf.pl', 'opoczta.pl', 'buziaczek.pl', 'adres.pl', 'amorki.pl', 'poczta.onet.eu');

Można to zrobić za pomocą strpos() ale wydaje mi się, że nie jest to wydajne.
  1. $result = mysql_query("SELECT email FROM maile");
  2. while($r = mysql_fetch_array($result))
  3. {
  4. foreach($maile_onet as $kay=>$wartosc)
  5. {
  6. $pos = strpos($r['email'], $wartosc);
  7. if ($pos !== false)
  8. {
  9. echo $r['email'].'<br />';
  10. }
  11. }
  12. }


Proszę o jakiś lepszy przykład tych dwóch moich problemów.
Go to the top of the page
+Quote Post
IProSoft
post 1.06.2012, 00:47:02
Post #2





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Sprawdź testowo preg_match, sprawdza się dopiero przy dużej ilości danych do przetworzenia ale działa wtedy szybciej od strpos.
Różnica w czasie 2-3ms na 20k wyników, przynajmniej u mnie ale miałem trochę inne dane.


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
phpion
post 1.06.2012, 07:24:35
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Podczas wykonywania zapytania do bazy możesz użyć chociażby NOT LIKE by pozbyć się niechcianych rekordów. Jak? Poszukaj sam.
Go to the top of the page
+Quote Post
tehaha
post 1.06.2012, 07:38:44
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


jeżeli to nie jest jednorazowa operacja, tylko działanie na bierząco to określaj domenę przy dodawaniu wiadomości w dodatkowej kolumnie tabeli, wtedy pobieranie będzie bardzo wydajne bo nic nie będzie trzeba filtrować
Go to the top of the page
+Quote Post
1q2w3e4r
post 1.06.2012, 12:01:40
Post #5





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 6.05.2011

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


Próbowałem tez tak, żeby było od razu na bazie:
  1. $maile_onet = array('onet.pl', 'op.pl', 'poczta.onet.pl', 'onet.eu', 'onet.com.pl', 'vp.pl', 'spoko.pl', 'vip.onet.pl', 'autograf.pl', 'opoczta.pl', 'buziaczek.pl', 'adres.pl', 'amorki.pl', 'poczta.onet.eu');
  2.  
  3. $query = "SELECT * FROM maile WHERE ";
  4. $a = 0;
  5. foreach($maile_onet as $kay=>$wartosc)
  6. {
  7. if($a == 0)
  8. {
  9. $query .= "email NOT LIKE '%@$wartosc'";
  10. }
  11. else
  12. {
  13. $query .= " OR email NOT LIKE '%@$wartosc'";
  14. }
  15. $a++;
  16. }
  17. //echo $query;
  18.  
  19. $result = mysql_query($query);
  20. while($r = mysql_fetch_array($result))
  21. {
  22. $mails = $r['email'];
  23. echo $mails.'<br />';
  24. }


Aby wykluczyć z listy wszystkie maile z onetu i dalej się pojawiają. Dlaczego?
Go to the top of the page
+Quote Post
k_@_m_i_l
post 1.06.2012, 12:12:21
Post #6





Grupa: Zarejestrowani
Postów: 349
Pomógł: 72
Dołączył: 22.01.2008
Skąd: Wadowice/Oświęcim

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



  1. $maile_onet = array('onet.pl', 'op.pl', 'poczta.onet.pl', 'onet.eu', 'onet.com.pl', 'vp.pl', 'spoko.pl', 'vip.onet.pl', 'autograf.pl', 'opoczta.pl', 'buziaczek.pl', 'adres.pl', 'amorki.pl', 'poczta.onet.eu');
  2.  
  3. $query = "SELECT * FROM maile WHERE ";
  4. $where = array();
  5. foreach($maile_onet as $kay=>$wartosc)
  6. {
  7. $where[] = "email NOT LIKE '%@$wartosc'";
  8.  
  9. }
  10. //echo $query;
  11. $query .= implode(' AND ',$where);
  12. $result = mysql_query($query);
  13. while($r = mysql_fetch_array($result))
  14. {
  15. $mails = $r['email'];
  16. echo $mails.'<br />';
  17. }


--------------------
"PHP to człowiek. MySQL to również człowiek."
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: 16.07.2025 - 11:51