传递一个值并按顺序调用previous,current和next值

时间:2015-06-26 12:07:01

标签: php mysql

我正在使用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. 如果$passedItemOrange,我想输出MangoOrange以及Strawberry

  2. 如果$passedItemMango,我想输出LycheeMango以及Orange

  3. 使用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);
    

1 个答案:

答案 0 :(得分:2)

此解决方案基于MySQL: Conditionally selecting next and previous rows

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