坚持更新列值

时间:2013-05-17 09:16:30

标签: php mysql sql

这是我的表likes

id  type parent country votes
1   1   0       US      0 # This value need to be 9
2   2   1       US      6
19  3   1       US      3
3   3   2       US      3
7   3   2       US      3
4   10  3       US      1
5   10  3       US      1
6   10  3       US      1
10  10  7       US      1
9   10  7       US      1
8   10  7       US      1
20  10  19      US      1
21  10  19      US      1
22  10  19      US      1

我正在做一个更新表中总票数的脚本。

此处type 10 updates type 3type 3 updates 2 and 1type 2 updates 1

当你运行我的脚本时,你会看到它是如何工作的。

此处,id 1必须为9,并且每次脚本运行时都不应刷新。其他人不。但是我找不到更新1的方法,而不会增加它的价值。

你能帮我找个方法吗?

继承剧本。

$conn = connect();

$what = 10;
$pathType = 15;

while ( $pathType >=2 )
{
$stmt = $conn->prepare("select max(type) as type from likes where type < :type and country = 'US'");
$stmt->bindParam(':type', $pathType);
$stmt->execute();
$pathData = $stmt->fetch();
$pathType = $pathData['type'];
echo 'Path Type is '.$pathType.'<br>';

    $stmt = $conn->prepare("select sum(votes) as votes, parent as parent from likes where type=:type group by parent");
    $stmt->bindParam(':type', $pathData['type']);
    $stmt->execute();
    $rows = $stmt->rowCount();

        while( $row = $stmt->fetch() ) {
            echo $row['parent']." ".$row['votes'];
            echo "<br>";

            if($row['parent'] == 1){
            echo 'Passed Level 1<br>';
                $wtf = $conn->prepare("update likes set votes=votes+:votes where id=:parent");
            }else{
                $wtf = $conn->prepare("update likes set votes=:votes where id=:parent");
            }

            $wtf->bindParam(':votes', $row['votes']);
            $wtf->bindParam(':parent', $row['parent']);
            $wtf->execute();
        }
    echo "-----------------------------------------------<br>";
}

这里是创建以防万一:

-- --------------------------------------------------------
-- Host:                         127.0.0.1
-- Server version:               5.5.25 - MySQL Community Server (GPL)
-- Server OS:                    Win64
-- HeidiSQL version:             7.0.0.4053
-- Date/time:                    2013-05-17 14:41:11
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

-- Dumping database structure for wwp-db
DROP DATABASE IF EXISTS `wwp-db`;
CREATE DATABASE IF NOT EXISTS `wwp-db` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `wwp-db`;


-- Dumping structure for table wwp-db.likes
DROP TABLE IF EXISTS `likes`;
CREATE TABLE IF NOT EXISTS `likes` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `type` tinyint(1) DEFAULT '0',
  `parent` int(10) DEFAULT '0',
  `country` varchar(2) DEFAULT NULL,
  `votes` int(10) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4176 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

-- Dumping data for table wwp-db.likes: 14 rows
/*!40000 ALTER TABLE `likes` DISABLE KEYS */;
INSERT IGNORE INTO `likes` (`id`, `type`, `parent`, `country`, `votes`) VALUES
    (1, 1, 0, 'US', 9),
    (2, 2, 1, 'US', 6),
    (3, 3, 2, 'US', 3),
    (4, 10, 3, 'US', 1),
    (5, 10, 3, 'US', 1),
    (6, 10, 3, 'US', 1),
    (7, 3, 2, 'US', 3),
    (8, 10, 7, 'US', 1),
    (9, 10, 7, 'US', 1),
    (10, 10, 7, 'US', 1),
    (19, 3, 1, 'US', 3),
    (20, 10, 19, 'US', 1),
    (21, 10, 19, 'US', 1),
    (22, 10, 19, 'US', 1);
/*!40000 ALTER TABLE `likes` ENABLE KEYS */;
/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

1 个答案:

答案 0 :(得分:0)

like中的第一行不符合第一个实例中if语句的条件。

if($row['parent'] == 1){
  echo 'Passed Level 1<br>'; //This doesn't apply to row with id 1 - but does to one with parent id 1
  $wtf = $conn->prepare("update likes set votes=votes+:votes where id=:parent");
}else{
 //Does not affect row with id 1 as it has a parent of 0
 $wtf = $conn->prepare("update likes set votes=:votes where id=:parent");
}

编辑:好的,所以它执行这个:  并更新第0行

$wtf = $conn->prepare("update likes set votes=votes+:votes where id=:parent");

当它到达父ID为1的行时,

你指示它添加到未设置为值的投票,每次刷新它自然会添加更多,如果你想让它停在某个值,为查询或代码添加另一个条件