我想从数据库中的三个表中获取所有链接在一起的数据。
我遇到了问题,我已经尝试过许多方法,例如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

09-15 23:54
查看更多