传递一个值并按顺序调用上一个、当前和下一个值


Pass a value and call previous, current and next values in order

我正在使用PDO。我希望能够使用单个查询从 3 个不同的行中获取 3 个值。我有一个表格如下。

itemID    |  Item_Name
____________________
125       |  apple
297       |  Lychee
851       |  Mango
005       |  Orange
1009      |  Strawberry

我希望能够发送Item_Name并按Item_Name对表进行排序,并能够调用下一个Item_Name和上一个Item_Name。我该怎么做?

例如:

  1. 如果$passedItem Orange我想输出MangoOrangeStrawberry.

  2. 如果$passedItem Mango我想输出LycheeMangoOrange

使用 on() 运算符不起作用,因为只能将一个Item_Name传递给查询。

$sql = "SELECT Item_Name FROM itemsTable WHERE Item_Name = :passedItem" ORDER BY ASC;
$stmt = $con_db->prepare($sql);
$stmt->execute(array(':passedItem'=>"Orange"));
$rslt = $stmt->fetchAll(PDO::FETCH_ASSOC);

此解决方案基于 MySQL:有条件地选择下一行和上一行。

$sql = "(SELECT Item_Name FROM itemsTable
         WHERE Item_Name < ?
         ORDER BY Item_Name DESC
         LIMIT 1)
        UNION ALL
        (SELECT Item_Name FROM itemsTable
         WHERE ItemName = ?)
        UNION ALL
        (SELECT Item_Name FROM itemsTable
         WHERE ItemName > ?
         ORDER BY Item_Name ASC
         LIMIT 1)";
$stmt = $con_db->prepare($sql);
$stmt->execute(array("Orange", "Orange", "Orange"));
$rslt = $stmt->fetchAll(PDO::FETCH_ASSOC);

您需要传递Orange三次才能填写所有占位符。

然后,您可以使用以下命令输出它:

foreach($rslt as $row) {
    echo $row['Item_Name'] . '<br>';
}