加入两个表并更新结果

时间:2018-03-02 02:39:53

标签: php mysql

我正在加入两个表,我想更新所有行。

CComPtr<EnvDTE::Project> temp;
CComBSTR pPath;
pSolution->get_TemplatePath(
    CComBSTR("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"), // C++
    &pPath);

我在“运行SQL查询”中尝试了上面的Select语句,它查询了我想要的结果。我想更新所有查询,但我不能。我尝试在更新下放置echo,它回显我需要更新的ID,但我的更新语句没有执行。

2 个答案:

答案 0 :(得分:1)

不是选择所有学生然后逐个更新,而是通过加入两个表并更新它,实际上可以一次性完成。

UPDATE  students s
        INNER JOIN course c ON c.id = s.course_id
SET     s.Year = '$Graduated', 
        s.Status = 'non-Active'
WHERE   c.duration = '2'
        AND s.status = '$stat' 
        AND s.Year = '$year'

还必须考虑到上面的查询易受sql注入攻击。下面的这篇文章将指导您如何防止它。

答案 1 :(得分:0)

第一个查询的问题是有两列具有相同的名称; ID。因此,引用行中的ID会产生错误。使用alias进行修复,如下所示。为了获得更好的性能,请使用内部join。您还忘记再次运行更新查询数据库。

<?php
include("connection/mysqlconnect.php");

$sql="  SELECT course.duration, course.id as cID, students.ID as sID
    FROM course JOIN students ON course.id=course_id
    where course.duration = '2'";

$result = $conn->query($sql);
$count=mysqli_num_rows($result);

if($count>=1)
{
    while($row = mysqli_fetch_array($result)) {
            $id = $row['sID'];
            $stat = 'Active';
            $year = '2nd Year';
            $Graduated = 'Graduated';

    echo "Student ID to be updated: $id<br/>";

    $sql1 = "UPDATE students SET Year='$Graduated', Status='non-Active' 
WHERE ID = '$id' and (status='$stat' and Year='$year')";

   //you have to execute the query for the update to be done.
   if ($conn->query($sql1) === TRUE) {
       echo "Record updated successfully ";
   } else {
       echo "Error updating record: " . $conn->error;
   }   
 }
}   
$conn->close();
?>