Php 从第二个查询或功能联接查询排序
我当前有一个需要显示的表,如下所示: 但正如您所看到的,它并没有按“已删除的金额”(代码中名为$amount和amount)排序 我首先需要收集名字并从表中删除id。是这样做的:Php 从第二个查询或功能联接查询排序,php,sorting,join,pdo,Php,Sorting,Join,Pdo,我当前有一个需要显示的表,如下所示: 但正如您所看到的,它并没有按“已删除的金额”(代码中名为$amount和amount)排序 我首先需要收集名字并从表中删除id。是这样做的: //----------------FETCH ALL CONTENTS FROM DROPTABLE TO DISPLAY DROPS------------\\ $query = "SELECT * FROM droptable WHERE boss_id = ". $boss .""; $stmt = $p
//----------------FETCH ALL CONTENTS FROM DROPTABLE TO DISPLAY DROPS------------\\
$query = "SELECT * FROM droptable
WHERE boss_id = ". $boss ."";
$stmt = $pdo->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $row){
$drop_id = $row['drop_id'];
$drop = $row['dropname'];
$boss_id = $row['boss_id'];
$picture = $row['picture'];
这将获取drop的名称(dropname)。它的id(drop_id)、boss id(boss_id)和图片(picture)。
然后,它会继续检查我是否记录过老板从另一张桌子上掉下来的信息:
//----------------FETCH ALL LOGGED DROPS FOR DISPLAYING AMOUNT------------\\
$query1 = "SELECT * FROM dropcounter
WHERE boss_id = ". $boss ." AND userid = ". $user ." AND drop_id = ". $drop_id ."";
$stmt1 = $pdo->prepare($query1);
$stmt1->execute();
$result1 = $stmt1->fetchAll(PDO::FETCH_ASSOC);
echo "<tr>";
echo "<td><img src='../images/". $picture ."'</td>";
echo "<td>". $drop . "</td>";
echo "<td>". $amount ."</td>";
echo "<td>". $percent ."</td>";
echo "<form action='logger.php' method='post'>";
echo "<td><input type='hidden' value=". $drop_id ." name='drop_id'>";
echo "<input type='hidden' value=". $boss_id ." name='boss_id'>";
echo "<input type='hidden' value=". $user ." name='user'>";
echo "<input type='submit' value='Add'></td>";
echo "</tr>";
echo "</form>";
以下是我桌上的结构:
DROPCOUNTER表:
这是DROPTABLE表格:
如果有人能帮我做任何一件事,我将非常高兴你的好意
如果有人想试试的话,这里有一把小提琴。我导入了一些示例数据:您试图在JOIN语句中使用:
dropcounter.username = ". $user ."
其中包含两个错误:
1.该表中没有字段用户名
2.您没有在“”中包含字符串
将其更改为dropcounter.userid
另外,您不需要选择droptable.drop_id和droptable.boss_id,因为它已经从dropcounter表中选择
编辑:根据您的小提琴:
SELECT dropcounter.drop_id, dropcounter.boss_id, dropcounter.userid, dropcounter.amount, droptable.dropname
FROM droptable
JOIN dropcounter
ON droptable.boss_id = dropcounter.boss_id
WHERE dropcounter.drop_id = droptable.drop_id AND droptable.boss_id = 1 AND dropcounter.userid = 1
ORDER BY dropcounter.amount DESC;
它可以正常工作和排序。如果要从
droptable
中获取在dropcounter
中不匹配的行,则需要使用左联接。所有引用dropcounter
的测试必须在ON
子句中,否则空匹配将导致测试失败,这些行将被过滤掉
SELECT dc.add_date, dc.username, IFNULL(dc.amount, 0) amount, dt.drop_id, dt.dropname, dt.boss_id, dt.wiki_link, dt.picture
FROM droptable dt
LEFT JOIN dropcounter dc
ON dt.boss_id = dc.boss_id AND dc.drop_id = dt.drop_id AND dc.userid = $user
WHERE dt.boss_id = $boss
ORDER BY amount
您的第二个代码对$result1
没有任何作用。我认为该连接应该可以工作。您可以添加dropcounter
表格内容吗?你能用样本数据做一个SQLFIDLE吗?@Barmar第二个代码确实对它做了一些事情。但是我没有包括它,因为它只是把所有的东西都分配给变量。什么是sqlfiddle?我还添加了DropCounterQLFidle的内容是sqlfiddle.com,这是一个公共网站,允许您创建SQL示例并与其他人共享。有一些示例数据可供使用。我从那以后更改了表格。用户名现在是userid。它是封闭的吗?“$user.”用户名建议它是VARCHAR字段,您需要将该类型的值括在“”中。到底什么意思是“这是不起作用的连接代码?”?是的。join语句。那代码不起作用。它在三天内没有给我想要的结果,所以我停止更新编辑后的答案,并根据你的小提琴添加了加入选择。
SELECT dc.add_date, dc.username, IFNULL(dc.amount, 0) amount, dt.drop_id, dt.dropname, dt.boss_id, dt.wiki_link, dt.picture
FROM droptable dt
LEFT JOIN dropcounter dc
ON dt.boss_id = dc.boss_id AND dc.drop_id = dt.drop_id AND dc.userid = $user
WHERE dt.boss_id = $boss
ORDER BY amount