Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]EXPLODE z PHP w kodzie mySQL
Forum PHP.pl > Forum > Przedszkole
yalus
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











Pyton_000
  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);
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.