Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 传递一个值,然后依次调用上一个、当前和下一个值_Php_Mysql - Fatal编程技术网

Php 传递一个值,然后依次调用上一个、当前和下一个值

Php 传递一个值,然后依次调用上一个、当前和下一个值,php,mysql,Php,Mysql,我在用PDO。我希望能够使用单个查询从3个不同的行中获取3个值。我有一张如下的桌子 itemID | Item_Name ____________________ 125 | apple 297 | Lychee 851 | Mango 005 | Orange 1009 | Strawberry 我希望能够发送一个Item\u Name并按Item\u Name对表进行排序,并且能够调用下一个Item\u Name和

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

itemID    |  Item_Name
____________________
125       |  apple
297       |  Lychee
851       |  Mango
005       |  Orange
1009      |  Strawberry
我希望能够发送一个
Item\u Name
并按
Item\u Name
对表进行排序,并且能够调用下一个
Item\u Name
和上一个
Item\u Name
。我该怎么做

e、 g:

  • 如果
    $passedItem
    橙色
    我想输出
    芒果
    橙色
    草莓

  • 如果
    $passedItem
    Mango
    我想输出
    Lychee
    Mango
    Orange

  • 使用
    on()
    运算符无效,因为只能将一个项目名称传递给查询

    $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);
    
    此解决方案基于


    @Barmar我在谷歌上搜索了几个小时,但我没有发现。也许只是获取所有项目,获取直到找到项目,然后显示索引-1和索引+1。。。这是一个很难回答的问题,因为您的表ID在您的情况下是无用的。。。如果您的表很大,那么“整个抓取”解决方案将不会非常有效…@Barmar next+previous在id排序行的情况下,我同意您的看法。但是他的非有序id的具体情况是不同的…@Julo0sS订购什么并不重要,技术是一样的。他说他想
    按商品名称
    @Julo0sS订购-你完全正确
    
    $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);
    
    foreach($rslt as $row) {
        echo $row['Item_Name'] . '<br>';
    }