我正在使用PDO和PHP与mysql数据库工作。我有一个在不同的建筑物工会成员的列表,我试图使它DB查询获得成员的资历号码。
数据库设置如下:
memberID
memberName
memberBuildingNumber
memberHireDate (2000-05-01 as an example)
memberPIN (Used in case of ties between hire date, lower pin is higher seniority)
我知道SQL将成员按正确的顺序排列:
SELECT * FROM `members` ORDER BY `members`.`memberHireDate` ASC, `members`.`memberPIN` ASC WHERE building = buildingB
(Yes I know my where statement is wrong)
我不确定如何去计数行来获得成员的位置。
例如:1457 John Smith BuildingB 2000-05-01 4745
1875 Jane Smith BuildingB 2000-05-01 4010
1407 Johnny Good BuildingB 2010-08-01 4745
所以在上面相同的情况下,在我运行第二个查询或任何我必须做的事情之后,如果我正在寻找Jane的资历号码,我会返回1
我实际做的是在DB的成员表中添加另一列。它包含资历编号,并由脚本设置。如果有人对未来感兴趣,这里是脚本。
$dbh = new PDO('mysql:host=localhost;dbname=DBNAME', $db_user, $db_password);
$stmt = $dbh->prepare('SELECT memberBuildingNumber FROM BuildingCodes WHERE BuildingCode > 0');
$stmt->execute();
foreach ($stmt->fetchAll() as $results) {
$memberBuildingNumber = $results['memberBuildingNumber'];
$dbh = new PDO('mysql:host=localhost;dbname=DBNAME', $db_user, $db_password);
$stmt = $dbh->prepare('SELECT * FROM members WHERE memberBuildingNumber=? ORDER BY memberHireDate ASC, memberPIN ASC');
$stmt->execute(array($memberBuildingNumber));
$seniority = 1;
$memberSeniorityLastUpdate = date("Y-m-d H:i:s");
foreach ($stmt->fetchAll() as $results) {
$dbh = new PDO('mysql:host=localhost;dbname=DBNAME', $db_user, $db_password);
$stmt = $dbh->prepare('UPDATE members SET memberSeniority=?, memberSeniorityLastUpdate=? WHERE memberID=?');
$stmt->execute(array($seniority, $memberSeniorityLastUpdate, $results['memberID']));
$seniority++;
}
}