现在几天,我无法找到解决此问题的解决方案有关从联接表中对数据进行排序的问题。
说我正在为用户制作餐厅行程。每个用户的行程中都有几家餐馆。
我有两张桌子,一张包含有关用户行程的信息(他什么时候会去餐馆,哪些餐馆),还有一张包含我所知道的所有餐馆的信息。
指南 ...................和.............. 餐馆< / em>的
userid ---> id
restaurant1_id -->--| name
date1 | style
restaurant2_id -->--| address
date2
&#34; restaurant1_id&#34;或&#34; restaurant2_id&#34;对应于&#34; id&#34;在餐馆餐桌。所以我内心加入这些表格如下:
SELECT restaurants.name AS name, restaurants.style AS style, restaurants.address AS address, guides.date1 AS date1, guides.date2 AS date2
FROM `guides`
INNER JOIN `restaurants`
ON guides.restaurant1_id = restaurants.id or guides.restaurant2_id = restaurants.id
WHERE guides.userid = 2
说我想看到所有餐馆的所有信息都是ID&#34; 2&#34;将访问。通过以下查询,我得到了所需的结果:
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo
$row['name'].'<br>'
.$row['style'].'<br>'
.$row['address'].'<hr>' ;
}
}
else {
echo 'No results.';
}
我创建了一个小提琴here。
我遇到问题时,会对结果进行排序。我喜欢&#34;指南&#34;中提到的餐厅。 table as&#34; restaurant1_id&#34;在&#34; restaurant2_id&#34;之前出现。
另一个问题是日期。我无法弄清楚如何显示&#39; date1&#39;旁边是&#39; restaurant1_id&#39;。
我应该将所有数据存储在变量中还是有更好的方法来解决这个问题?我很感激任何建议!
答案 0 :(得分:0)
尝试查询
SELECT IF(guides.restaurant1_id = restaurants.id, 1, 0) as srt ,
restaurants.name AS name, restaurants.style AS style,
restaurants.address AS address, guides.date1 AS date1, guides.date2 AS date2
FROM `guides`
INNER JOIN `restaurants` ON guides.restaurant1_id = restaurants.id or guides.restaurant2_id = restaurants.id
WHERE guides.userid = 2
order by srt DESC
显示结果:
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo
$row['name'].'<br>'
.($row['srt']?$row['date1']:$row['date2']).'<br>'
.$row['style'].'<br>'
.$row['address'].'<hr>' ;
}
}
else {
echo 'No results.';
}