我想从数据库中的三个表中获取所有链接在一起的数据。
我遇到了问题,我已经尝试过许多方法,例如merge, unique and separate list
。
以下是代码。
<?php
$conn=new mysqli("localhost","root","","db");
$rows=$conn->query("select Account,Amount, event_name,event_description from donations
LEFT JOIN accounts
ON accounts.ID_Account=donations.ID_Account
LEFT JOIN events
ON events.event_id=donations.event_id ");
$rows1=$conn->query("SELECT Account from accounts");
while((list($Account, $Amount, $event_name,$event_description)=$rows->fetch_row()) and (list($Account)=$rows1->fetch_row()))
{
echo "<tr><td> $Account</td><td> $Amount </td><td>$event_name</td><td>$event_description</td></tr>";
}
?>
现在的问题是,它显示了帐户中的重复数据,我也希望它像没有帐户
$Amount
的捐赠$Account
一样,它不应该在Account
前面显示捐赠。有什么办法可以使其按我想要的方式工作?非常感谢。
最佳答案
您正在寻找一些数据混合方法。现在,您将获得带有结果数据的A * B * C = X行,因为您正在执行多个连接,而mysql中的结果数组将始终只有一个维度,因此会有很多重复的数据。
您想要的是具有多个维度的数组(或对象)。我假设您想要一个类似以下的结果数组:
$result = array(
'account1' => array('event1', 'event2'),
'account1' => array('event3', 'event4', 'event5')
);
有多种解决方案:
编写自己的数据混合方法以使用结果中的值创建一个新数组
执行三个单个查询,而不是使用JOIN进行一个查询,然后合并结果(甚至可以更快!)
使用doctrine(PHP数据库抽象层)可以完全按照您的要求进行操作而不会造成太大麻烦。
如果您开始编写新应用程序的代码,我将向您推荐3.):
http://doctrine-orm.readthedocs.org/en/latest/tutorials/getting-started.html