【问题标题】:mysql & PDO - row number of sorted and filter resultsmysql & PDO - 排序和过滤结果的行数
【发布时间】:2015-11-04 13:04:58
【问题描述】:

我正在使用 PDO 和 PHP 处理 mysql 数据库。我有一个不同建筑物中的工会成员列表,我试图通过数据库查询来获取成员的资历编号。

数据库是这样设置的:

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

(是的,我知道我的 where 语句是错误的)

我不确定如何计算行数以获得成员的位置。

例如:

1457 John Smith BuildingB 2000-05-01 4745
1875 Jane Smith BuildingB 2000-05-01 4010
1407 Johnny Good BuildingB 2010-08-01 4745

所以在我运行第二个查询或我必须做的事情之后,如果我正在寻找简的资历编号,我会返回 1。

【问题讨论】:

  • 您确定要按最后一个块的顺序返回数据吗?

标签: php mysql sql-server


【解决方案1】:

我实际上所做的是在数据库的成员表中添加了另一列。它拥有资历编号并由脚本设置。如果有人对未来感兴趣,这里是脚本。

$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++;
   }
}

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多