Php SQL选择rand并更新结果

Php SQL选择rand并更新结果,php,mysql,sql,Php,Mysql,Sql,我有这个横幅系统在我的网站上运行。我有一个SQL表,它存储id、链接、标题、打印和点击等内容 所以,我需要在给定的页面上随机打印它们,并用prints+1值更新prints column(这是这个横幅显示的次数)。我使用了两个查询,一个用于选择,一个用于更新,但我知道只使用一个查询是可能的,但我听说对于SQL+PHP来说,这不太健康。但是,当我运行脚本时,它会将值添加两次,如果应该是多打印一次,则会添加两次。已检查脚本是否每个id运行两次,但未检查,脚本正在正常运行。代码如下: $query =

我有这个横幅系统在我的网站上运行。我有一个SQL表,它存储id、链接、标题、打印和点击等内容

所以,我需要在给定的页面上随机打印它们,并用prints+1值更新prints column(这是这个横幅显示的次数)。我使用了两个查询,一个用于选择,一个用于更新,但我知道只使用一个查询是可能的,但我听说对于SQL+PHP来说,这不太健康。但是,当我运行脚本时,它会将值添加两次,如果应该是多打印一次,则会添加两次。已检查脚本是否每个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);
    }

不能在一个查询中同时选择行和更新行。您可以更新在一个查询中选择的所有行(使用
WHERE ban_id in(id列表)
),但至少需要两个查询

$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());
$query=”
挑选
`ban_id`AS`id`,
`ban_code`AS`code`,
`将“img”改为“img”,
`banu title`AS`title`,
`ban_link`AS`link`,
`ban_prints`AS`prints`
从…起
`横幅`
哪里
`ban_paid`='y'
及
`ban_active`='a'
及
`禁止开始日期`<当前时间戳
及
`禁止最后日期`>当前时间戳
订购人
兰德()
极限
3.
";
$result=mysql\u query($query)或die(mysql\u error());
while($row=mysql\u fetch\u数组($result)){
$banner[]=$row;
$ids[]=$row['id'];
}
$query=”
更新
`横幅`
设置
`ban_prints`=`ban_prints`+1
哪里
`ban_id`IN(“.intlode(',',$ids)。”
";
mysql_query($query)或die(mysql_error());

为什么在表定义中的每一列前面都加上
ban
?似乎是多余的,因为banners表中的每一行都是横幅。