PHP добавить много строк в базу данных - PullRequest
1 голос
/ 10 августа 2011

У меня проблема с базой данных. Я хочу добавить около 10 новых строк после загрузки страницы. Следует проверить, есть ли статья с идентификатором (которая на самом деле загружается). Если это не так, добавьте 10 из этого идентификатора с другим идентификатором тега.

$sprawdz = "SELECT id_artykulow FROM tag_art WHERE id_artykulow='".$_GET['id']."' " ;
$miasto = mysql_query($sprawdz);   
$a = mysql_num_rows($miasto); 
while ($a<=10){ 
$zm = "SELECT id FROM tag_content ORDER BY RAND() LIMIT 1";
$sw = mysql_query($zm);
while($row3=mysql_fetch_array($sw)){
$zmienna = "INSERT INTO tag_art(id_artykulow, id_tagow) VALUES ('".$_GET['id']."', '".$row3['id']."' ) ";
$cokolwiek = mysql_query($zmienna);
}
$a++; 
}  

Есть две таблицы. Один tag_content с id (из тегов), а другой tag_art с id_artykulow (= идентификатор статьи) и id_tagow (идентификатор тега, взятого из tag_content) Не знаю почему, но он не добавляет 10 строк (это должно быть, например, десять id_artykulow = 10, с другим id_tagow). Как это исправить?

Спасибо за помощь и дайте мне знать, если вам нужно больше информации (например, больше кода и т. Д.)

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

почему у вас 2 цикла while? не могу просто заменить

while ($a<=10){ 
$zm = "SELECT id FROM tag_content ORDER BY RAND() LIMIT 1";

с

if ($a<=10){ 
$zm = "SELECT id FROM tag_content ORDER BY RAND() LIMIT " . (10-$a);

или просто дайте базе данных выполнить всю работу:

$query = "INSERT INTO tag_art(id_artykulow, id_tagow) SELECT '".$_GET['id']."', id  FROM tag_content ORDER BY RAND() LIMIT " . (10-$a);

(и я бы также рекомендовал защиту от sql-инъекций, mysql_real_escape_string () )

0 голосов
/ 31 мая 2013

Или пусть база данных сделает всю работу:

// store id as mysql-variable, but let php force it to an integer first
mysql_query("SET @id = " . (int) $_GET['id']);

// calculate how many new art we need, to get 10, using greatest to avoid negative numbers
mysql_query("SELECT @art_needed := GREATEST(0, 10 - COUNT(*)) FROM tag_art WHERE id_artykulow = @id");

// Need to use prepere to be able to have an mysql-variable as limit
mysql_query("PREPARE art_stmt FROM 'INSERT INTO tag_art(id_artykulow, id_tagow) SELECT ?, id FROM tag_content ORDER BY RAND() LIMIT ?'");

// execute the query using the mysql-variables
mysql_query("EXECUTE art_stmt USING @id, @art_needed");

Просто перечитайте мой старый ответ и больше не соглашайтесь с «или просто дайте базе данных выполнить всю работу» для этого ответа, база данных может сделать намного больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...