如何从php中的数据库不同表中获取特定和唯一的数据

时间:2015-01-27 14:53:59

标签: php mysql sql database

我想从数据库中获取数据三个表都链接在一起。 我遇到了问题,我尝试了许多方法,如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一样,它不应该在{{1}前显示捐款1}},但它正在显示。有什么方法可以让它以我想要的方式工作吗? 非常感谢。

1 个答案:

答案 0 :(得分:0)

您正在寻找一些数据水合方法。现在,您将获得A * B * C = X行的结果数据,因为您正在进行多个连接,并且您生成的mysql数组将始终只有一个维度,因此会有大量重复数据。

你想要的是具有多个维度的数组(或对象)。我假设你想要一个结果数组,如:

$result = array(
    'account1' => array('event1', 'event2'),
    'account1' => array('event3', 'event4', 'event5')
);

有多种解决方案:

  1. 编写您自己的数据水合方法,以使用结果中的值
  2. 创建一个新数组
  3. 使用JOIN执行三个单个查询而不是一个查询,然后合并结果(甚至可以更快!)
  4. 使用doctrine(一个php数据库抽象层),可以完全按照自己的意愿行事,而不会有太多麻烦。
  5. 如果您开始编写新应用程序,我会向您推荐3.):

    http://doctrine-orm.readthedocs.org/en/latest/tutorials/getting-started.html