更新一个表中的计数ID值,并显示在另一个表的列中

时间:2016-04-24 13:17:54

标签: php mysql sql

UPDATE CD
    SET cdNumOfTracks = (
        SELECT COUNT(cdID)
            FROM Track
        WHERE Track.cdID = CD.cdID
        GROUP BY cdID
        );

上面的查询我用来计算' cdID'来自一张桌子" Track"并将它显示在" CD"表格列为“cdNumOfTracks'”。 ' CDID'是" Track"中的外键。表来自" CD"表。查询工作正常,但我必须手动运行以更新数据。

我使用此数据库作为通过PHP / HTML表单获取数据的网站的一部分,因此我需要SQL后端自动更新。

为了使其正常工作,我需要能够添加一个曲目,并为其提供一个“cdID”。然后,这将在“cdNumOfTracks”中添加1。列添加为新曲目

1 个答案:

答案 0 :(得分:1)

您的问题的答案是使用触发器。您需要触发(至少)插入和删除,并可能需要更新。除非您有一个非常大的数据库,否则我建议您直接从group by获取计数。

我确实想要注意一些事情。由于NULL,如果没有匹配项,您的查询将返回0而不是group by。通常,相关子查询不使用UPDATE CD SET cdNumOfTracks = (SELECT COUNT(cdID) FROM Track WHERE Track.cdID = CD.cdID );

        SmtpClient SmtpServer = new SmtpClient("smtp.live.com");
        var mail = new MailMessage();
        mail.From = new MailAddress("crazy_akin399999@hotmail.com");
        mail.To.Add("akin.********@gmail.com");
        mail.Subject = "Your Sub";
        mail.IsBodyHtml = true;
        string htmlBody;
        htmlBody = "HTML code";
        mail.Body = htmlBody;
        SmtpServer.Port = 587;

        SmtpServer.UseDefaultCredentials = false;

        SmtpServer.Credentials = new System.Net.NetworkCredential("****abdull*h**lu@gmail.com", "*****");
        SmtpServer.EnableSsl = true;

        SmtpServer.Send(mail);