我正在使用PDO。我希望能够使用单个查询从3个不同的行中获取3个值。我有一张桌子如下。
itemID | Item_Name
____________________
125 | apple
297 | Lychee
851 | Mango
005 | Orange
1009 | Strawberry
我希望能够发送Item_Name
并按Item_Name
对表格进行排序,以便能够拨打下一个Item_Name
和之前的Item_Name
。我怎么能这样做?
例如:
如果$passedItem
为Orange
,我想输出Mango
和Orange
以及Strawberry
。
如果$passedItem
为Mango
,我想输出Lychee
和Mango
以及Orange
使用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);
答案 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>';
}