Witam
Do tej pory wszytskie zapytania do bazy wykonuje z poziomu PHP, jendak przy dużych ilościach danych zauważam problemy z wydajnością.
Chciałbym część zapytań wykonywać bezpośrednio na bazie MySQL.
Czy może ktoś wie jak zrobić poniższe zapytanie (pętle) bez zastosowania php ?
$i = 0; for($i; $i<31262; $i++){ $insert = http://www.php.net/mysql_query("INSERT INTO nazwa_tabeli (id_product, priority) values ($i, 'taki sam ciąg znaków')"); http://www.php.net/echo $i.'<br>'; }
Najpierw generuj listę values potem podstaw do zapytania. Rozszerzenie mysql_ zostało dawno temu usunięte z php.
Jeśli ma ktoś gotowy kod SQL będę zobowiązany.
Domyślam się że viking miał na myśli coś w wym stylu
$values=[]; for($i=0; $i<31262; $i++){ $values[]="($i, 'taki sam ciąg znaków')"; } $insert = http://www.php.net/mysql_query("INSERT INTO nazwa_tabeli (id_product, priority) values ".http://www.php.net/implode(',',$values));
A spróbuj to zrobić tak. Nadal to jedno po drugim, ale w jednej transakcji i PDO:
$pdo = new PDO('mysql:host=localhost;dbname=nazwa_bazy;charset=utf8', 'user', 'hasło'); $pdo->beginTransaction(); $q = $pdo->prepare("INSERT INTO nazwa_tabeli (id_product, priority) values (:id_product, :priority)"); for ($i = 0; $i < 31262; $i++) { $q->bindValue(':id_product', $i, PDO::PARAM_INT); $q->bindValue(':priority', 'taki sam ciąg znaków', PDO::PARAM_STR); $q->execute(); } $pdo->commit();
Dziękuje za odpowiedzi, wasze rozwiązania za pomocą PHP są rzeczywiście troszkę szybsze od mojego (przykład podałem taki prosty aby był łatwy do analizy).
Jednak nie ukrywam że pytałem jak to zrobić bez PHP, czyli za pomoca samego SQL. wiem że są procedury w MySQL ale nie miałem z tym nigdy styczności, a podejrzewam ze za ich pomocą taki skrypt wykona się kilkadziesiąt razy szybciej.
Przykład: kopiowanie tabel za pomoca SQL trwa kilka sekund, z poziomu PHP import/export około minuty.
Czyzby chodzilo ci o to
https://dev.mysql.com/doc/refman/8.0/en/load-data.html
?
@kreatiff tylko po co pdo skoro @arpi korzysta z mysql - należały by przejść na mysqli
https://www.php.net/manual/en/mysqli.prepare.php
https://www.php.net/manual/en/mysqli.begin-transaction.php
https://www.php.net/manual/en/mysqli.commit.php
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)