Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]EXPLODE z PHP w kodzie mySQL
yalus
post
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

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


Witam,

zastanawiam się czy moje rozwiązanie można wykonać jakoś lepiej, bo wydaj mie się że jest mało wydajne, wolne itd itp


mam tabele w mysql:


id | tekst | imie | nazwisko | email | tel | dob |


wszystkie kolumny są puste oprócz kolumny id i tekst

kolumna `id` to unique autoincrement

a `tekst` to zwykły text w takiej formie:

jan <*> kowalski <*> jan@kowalski.xyz <*> 1234567890 <*> 10-10-2000

teraz z poziomu php wyciągam sobie dane z kolumny `tekst` i rozbijam je na kawałki dzięki EXPLODE wg <*>

otrzymuje tablice z pozostałymi danymi dzięki czemu mogę zaktualizować pozostałe puste kolumny odpowiednimi informacjami, wszystko to wygląda tak

  1. $sql = "select * from tbl_name";
  2. $result = $link->query($sql);
  3. while($row = mysqli_fetch_array($result))
  4. {
  5. $d = explode("<*>", $row["tekst"]);
  6. $sql = 'update tbl_name
  7. set value
  8. imie = "$d[0]",
  9. nazwisko = "$d[1]",
  10. email = "$d[2]",
  11. tel = "$d[3]",
  12. dob = "$d[4]"
  13. where id = $row["id"] limit 1
  14. }


rekordów w tabeli mam ponad 2 miliony, wiadomo czym grozi puszczenie takiej pętli, wiem mógłbym sobie dzielić zapytanie po kilka tysięcy rekordów

zastanawiam się czy taką aktualizację można by wykonać w inny sposób np. bardziej z poziomu SQL niż tak jak ja to robie w PHP i w pętli while ?

pozdrawiam
i z góry dzięki za wszystkie sugestie











Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


  1. CREATE FUNCTION SPLIT_STR(
  2. x VARCHAR(255),
  3. delim VARCHAR(12),
  4. pos INT
  5. )
  6. RETURNS VARCHAR(255)
  7. RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
  8. LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
  9. delim, '');
  10.  
  11. UPDATE TABLE SET
  12. imie = SPLIT_STR(`text`, '<*>', 1),
  13. nazwisko = SPLIT_STR(`text`, '<*>', 2),
  14. email = SPLIT_STR(`text`, '<*>', 3),
  15. tel = SPLIT_STR(`text`, '<*>', 4),
  16. dob = SPLIT_STR(`text`, '<*>', 5);
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: 23.08.2025 - 07:52