我有这个横幅系统在我的网站上运行。我有一个SQL表,可以存储id,链接,标题,打印和点击等内容。
因此,我需要在给定页面上随机打印它们,并使用打印件+ 1值更新打印件coloumn(这是显示此横幅的次数)。我正在进行2个查询,选择然后进行更新,但我知道只有一个查询可以做,但我听说它对SQL + PHP不太健康。但是,当我运行脚本时,它会将值加两次,其中应该是一次打印更多,它添加了2.已经检查过脚本是否每个id运行两次,但事实并非如此,它正常运行。代码如下:
$query = 'SELECT * FROM banners WHERE (NOW() BETWEEN ban_start_date AND ban_final_date) AND ban_paid = "y" AND ban_active = "a" ORDER BY RAND() LIMIT 3';
$query = mysql_query($query) or die(mysql_error());
while($response = mysql_fetch_array($query)){
extract($response);
$banners[] = array('id' => $ban_id, 'code' => $ban_code, 'img' => $ban_img, 'title' => $ban_title, 'link' => $ban_link, 'prints' => $ban_prints);
$ban_qr = 'UPDATE banners SET ban_prints = ban_prints + 1 WHERE ban_id = "' . $ban_id . '"';
$ban_qr = mysql_query($ban_qr) or die(mysql_error);
}
答案 0 :(得分:0)
您不能同时选择行并在一个查询中更新它们。您可以更新在一个查询中选择的所有行(使用WHERE ban_id IN (list of IDs)
),但仍需要最少两个查询。
$query = "
SELECT
`ban_id` AS `id`,
`ban_code` AS `code`,
`ban_img` AS `img`,
`ban_title` AS `title`,
`ban_link` AS `link`,
`ban_prints` AS `prints`
FROM
`banners`
WHERE
`ban_paid` = 'y'
AND
`ban_active` = 'a'
AND
`ban_start_date` < CURRENT_TIMESTAMP
AND
`ban_final_date` > CURRENT_TIMESTAMP
ORDER BY
RAND()
LIMIT
3
";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$banners[] = $row;
$ids[] = $row['id'];
}
$query = "
UPDATE
`banners`
SET
`ban_prints` = `ban_prints` + 1
WHERE
`ban_id` IN (" . implode(',', $ids) . ")
";
mysql_query($query) or die(mysql_error());