2012-09-19 15 views
35

Chcę napisać skrypt, z funkcją do wielu zapytań wstawiania. Pozwól mi wyjaśnić to lepiej.Wstawianie wielu wierszy z jednym zapytaniem MySQL

Mam jedno wejście quantity w formie html. i mam kwerendę MySQL do wstawienia registered user do tabeli. , więc chcę, aby moja funkcja wstawiła to zapytanie dla "ilości" razy.

mysql_query("INSERT INTO `pxlot` (realname,email,address,phone,status,regtime,ip) 
VALUES ('$realname','$email','$address','$phone','0','$dateTime','$ip')") 
or die (mysql_error()); // Inserts the user. 

Aby wstawić to na przykład 3 razy. Jakieś sugestie?

+5

Jeśli powtarzasz wiersz identycznych wartości wiele razy w danej tabeli, robisz to źle. Musisz wrócić i ponownie ocenić swój projekt schematu. –

+2

przy okazji mysql_ * jest przestarzałe –

Odpowiedz

77
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4); 

http://dev.mysql.com/doc/refman/5.5/en/insert.html

+5

jaki jest limit list wartości kolumn w wyciągu? Mam na myśli ile krotek '(1,2)' możemy przekazać do pojedynczej instrukcji 'INSERT'. – PythonDev

+6

@akshay, tak naprawdę nie znam odpowiedzi, podejrzewam, że ograniczenie nie zależy od liczby krotek, ale raczej od rozmiaru instrukcji, który jest kontrolowany przez zmienną systemową 'max_allowed_packet' mysql. Myślę, że domyślna wartość to 1MB z maksymalną protokołem 1GB. –

18

Oto kilka sposobów, aby to zrobić

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
from SOMETABLEWITHTONSOFROWS LIMIT 3; 

lub

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip' 

lub

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
values ('$realname','$email','$address','$phone','0','$dateTime','$ip') 
,('$realname','$email','$address','$phone','0','$dateTime','$ip') 
,('$realname','$email','$address','$phone','0','$dateTime','$ip') 
13

W większości przypadków wstawianie wielu rekordów za pomocą jednej instrukcji Insert jest znacznie szybsze w MySQL niż wstawianie rekordów z pętlą for/foreach w PHP.

Załóżmy, że kolumny $ column1 i $ column2 są tablicami o tym samym rozmiarze nadawanymi przez formularz html.

Można utworzyć zapytanie tak:

<?php 
    $query = 'INSERT INTO TABLE (`column1`, `column2`) VALUES '; 
    $query_parts = array(); 
    for($x=0; $x<count($column1); $x++){ 
     $query_parts[] = "('" . $column1[$x] . "', '" . $column2[$x] . "')"; 
    } 
    echo $query .= implode(',', $query_parts); 
?> 

Jeśli dane zostaną wysłane do dwóch rejestrów zapytania staną:

wstawić do tabeli (column1, column2) VALUES ('dane' , "dane"), ("dane", "dane")

0

Jeśli chcesz wstawić wiele wartości, powiedzmy z wielu wejść, które mają di fferent po wartości, ale tej samej tabeli do wstawienia do następnie po prostu użyć:

mysql_query("INSERT INTO `table` (a,b,c,d,e,f,g) VALUES 
('$a','$b','$c','$d','$e','$f','$g'), 
('$a','$b','$c','$d','$e','$f','$g'), 
('$a','$b','$c','$d','$e','$f','$g')") 
or die (mysql_error()); // Inserts 3 times in 3 different rows 
Powiązane problemy