【问题标题】:display data from 2 tables显示来自 2 个表的数据
【发布时间】:2014-07-28 13:16:57
【问题描述】:

我想在表格中显示 srfno、datecreated、clientname 和 returneditem。 srfno、datecreated 和 clientname 来自 sales 表,而 returneditem 在 sales_item 表中。表通过 srfno 关联。我能够显示 srfno、日期和客户名称,但没有返回项目。 请找出我的代码中的错误和缺失。任何解释和帮助都可以。谢谢。 加载数据代码:

if(isset($_GET['sn'])){
    $ppid = $_GET['sn'];
    $sqlLoader="Select sales.srfno, sales.clientid, sales.datecreated, 
                sales_item.retdesc 
                from sales 
                RIGHT JOIN sales_item ON sales.srfno==sales_item.srfno";
    $resLoader=$con->prepare($sqlLoader);
    $resLoader->execute(array($ppid));      

    while($rowLoader = $resLoader->fetch(PDO::FETCH_ASSOC)){
        $sn= $rowLoader['srfno'];
        $dcr= $rowLoader['datecreated'];
        $cid=$rowLoader['clientid'];
        $retid=$rowLoader['srfno'];
        $retdesc=$rowLoader['retdesc'];

这是我用于显示 srf、日期、客户名称和返回项目的代码。我在这里使用了一些 pdo:

$sql="Select sales.srfno, sales.datecreated, sales.clientid, sales_item.retdesc 
      from sales 
      RIGHT JOIN sales_item ON sales.srfno=sales_item.srfno";
$res=$db->prepare($sql);
$res->execute();    
$str="<div><table cellpadding='0' cellspacing='0' border='0' class='display' id='tbl' class='jtable' align='center'>";
$str.="<thead><tr><th width='250px'>SRF No</th><th>Date Created</th><th align='center'>Client Name</th><th>Returned Item</th><th></th><th></th></tr></thead><tbody>";

while($row = $res->fetch(PDO::FETCH_ASSOC))
{
    $str.="<tr><td><center>".$row['srfno']."</center></td>";
    $str.="<td align='center'>".$row['datecreated']."</td>";

    $sclientid=$row['clientid'];
        $cli="Select name from client where clientid=$sclientid";
        $client=$db->prepare($cli);
        $client->execute(); 
        while($clie= $client->fetch(PDO::FETCH_ASSOC))
        {
            $clientname=$clie['name'];
        }

    $item=$row['srfno'];
        $itemret="Select retdesc from sales_item where srfno=$item";
        $itemreturn=$db->prepare($itemret);
        $itemreturn->execute();
        while($return=$itemreturn->fetch(PDO::FETCH_ASSOC))
        {
            $retdesc=$return['retdesc'];
        }

    $str.="<td align='center'>".$clientname."</td>";
    $str.="<td align='center'>".$retdesc."</td>";

【问题讨论】:

  • 你在哪里选择returnitem?
  • @echo_Me 在 sales_item 表
  • 您在滥用 PDO - 即使在这里也应该使用参数化查询。鉴于连接键的常用类型,您可能不会在 this 实例中受到 SQL 注入攻击。你不应该再去追求sales_item,因为它会出现在原始结果集中(也许只使用ORDER BY?)。而且我可能还会为client 添加一个连接。哦,RIGHT JOIN 很少使用 - LEFT (OUTER) JOIN 倾向于使用,出于偏好,尽管您可能可以在这里使用常规的 (INNER) JOIN...
  • @Clockwork-Muse 我明白你所说的。我所做的是排除了获取 $retdesc 的过程。我刚刚使用 .$row['retdesc'] 调用了 $retdesc。谢谢!!!!!!

标签: php mysql sql pdo


【解决方案1】:

看起来 Echo_me 是正确的。您没有在查询中选择返回的项目:

$sql="Select sales.srfno, sales.datecreated, sales.clientid, sales_item.retdesc 
from sales 
RIGHT JOIN sales_item 
ON sales.srfno=sales_item.srfno";

将项目添加到您的查询中

$sql="Select sales.srfno, sales.datecreated, sales.clientid, sales_item.retitem, sales_item.retdesc 
from sales 
RIGHT JOIN sales_item 
ON sales.srfno=sales_item.srfno";

【讨论】:

  • @echo_Me 返回的商品是 sales_item.retdesc。它是一样的,我没有retitem让我称呼它
【解决方案2】:

对于那些可能遇到这个问题的人,您不需要创建另一个查询来获取另一个表的值,尤其是在您使用连接时。使用 join 将使您的生活更轻松。只需通过 .$row['fieldname'] 调用变量即可! :) 感谢帮助我意识到我的代码有什么问题的人。谢谢大佬!

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多