【发布时间】:2016-08-12 20:02:30
【问题描述】:
+------------------------------------+
| uid | user_name | food |
+-----------------------------------+
| 12345 | Joe | 3,1,2 |
| 12346 | John | 2,1 |
| 12347 | David | 30,2,1 |
| 12355 | Peter | 50,1 |
+-----------------------------------+
+-------------------------+
| food_id | food_name |
+------------------------+
| 1 | apple |
| 2 | orange |
| 3 | banana |
| 50 | pear |
+------------------------+
$user_sql = "SELECT `uid`,`user_name`,`food` FROM `user`";
$stmt = $pdo->prepare($user_sql);
$stmt->execute();
$user_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$food_id = $user_data["food"]; // will be get eg: 50,1,3
$food_sql = "SELECT * FROM `food` WHERE `food_id` in ($food_id)";
$stmt = $pdo->prepare($food_sql);
$stmt->execute();
$food_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
我将成为 foreach $food_data。
没关系,可以展示一下。
但是这个数组($food_data) 是按food.food_id 排序的,我需要与user.food 排序相同
EG秀:
Joe - apple,orange,banana(默认按 food_id 1,2,3 排序)
John - apple,orange(默认按 food_id 1,2 排序)
David - apple,orange,pear(默认按 food_id 1,2,50 排序)
Peter - apple,pear(默认按 food_id 1,50 排序)
但我需要改变它。
如何改成
Joe - 香蕉、苹果、橙色(排序与 user.food 字段值 3,1,2 相同)
John - orange,apple(排序与 user.food 字段值 2,1 相同)
David - pear,orange,apple(排序与 user.food 字段值 30,2,1 相同)
Peter - pear,apple(排序与 user.food 字段值 50,1 相同)
我曾通过 smarty 模板插件一一尝试选择 sql。
但这太浪费资源了。我可以用 php 或 mysql 做点什么吗?
【问题讨论】:
-
在查询末尾添加
ORDER BY food_id DESC -
有很多方法可以实现你想要的,但看起来,这就是你想要的:stackoverflow.com/questions/4858828/…。
-
1.规范化您的数据
-
所以你建议我将两条sql语句合并为一条语句?
-
你想要这样 SELECT * FROM
testWHERE id in (2,3,1) ORDER BY FIELD(id,3,2,1) ?