我的数据库有问题。我想在页面加载后添加大约10个新行。它应该检查是否有带有id的文章(实际上正在加载)。如果不是,添加该id的10个不同的标签id。
$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)和id_tagow(取自tag_content的标签id)不知道为什么,但它没有添加10行(例如,它应该是ten id_artykulow = 10,与不同的id_tagow)。如何解决这个问题?
谢谢你的帮助,如果你需要更多的信息(如更多的代码等),请告诉我
为什么有两个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())
或者让数据库完成所有的工作:
// 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");
只是重读了我的旧答案,不再同意"或者只是让数据库做所有的工作"对于那个答案,数据库可以做更多。