首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP MYSQL SELECT和LEFT JOIN -不返回所有结果

PHP MYSQL SELECT和LEFT JOIN -不返回所有结果
EN

Stack Overflow用户
提问于 2017-08-22 10:31:19
回答 1查看 991关注 0票数 0

我有两张桌子customercustomer_transaction。两者都有通用的customer_id,但customer_transaction也有一个字段description,我希望根据公共customer_id返回该字段。结果正常工作,但对于所有没有customer_transaction.和customer_id的记录,省略了customer_id。按图像描述。我确信我在这里遗漏了一些小东西。

相关代码的一部分。我似乎认为问题在于SELECT语句。

代码语言:javascript
运行
复制
$sql = "SELECT * FROM customer LEFT OUTER JOIN customer_transaction ON customer. customer_id =customer_transaction. customer_id WHERE customer.customer_group_id = $input";

$sth = $pdo->prepare($sql);
$sth->bindParam(':start',$start,PDO::PARAM_INT);
$sth->bindParam(':length',$length,PDO::PARAM_INT);
$sth->bindParam(':query',$query,PDO::PARAM_STR);
$sth->execute();

foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $row) {
    $phpvar = "$row[description] "; //creat variable for descriptio so as to limit the length using substr
    echo '<tr>';
    echo '<td>'. $row['customer_id'] . '</td>';
    echo '<td>'. $row['company_name'] . '</td>';
    echo '<td>'. $row['firstname'] ." ". $row['lastname'] .'</td>';
    echo '<td>'. $row['email'] . '</td>';
    echo '<td>'. $row['telephone'] . '</td>';
    echo '<td>'. $row['customer_id'] . '</td>';
    echo '<td>'. $row['customer_group_id'] . '</td>';
    echo '<td>'. substr($phpvar,0) . '</td>'; //Limit the length of the transactions here
    echo '<td width=250>';
EN

Stack Overflow用户

回答已采纳

发布于 2017-08-22 11:00:41

问题是,您有两次customer_id。但是,数组只能有一个名为customer_id的键。这些值简单地按字段复制到数组字段,并使用字段名作为键。第二次出现的值,即来自customer_transaction表的事件,是覆盖来自customer表的事件,而且因为不是每个客户都有事务,所以您将在那里得到空字段。

最好的解决方案是在您需要的领域中更加精确。无论如何,最好只获取您需要的字段,而不是使用*

因此,您的查询可能如下所示。更详细一些,但灵活地使用别名、计算值,并且不需要返回您不使用的字段的开销。

代码语言:javascript
运行
复制
SELECT
    c.customer_id,
    c.company_name,
    c.firstname,
    c.email,
    c.telephone,

    /* You could provide the field with an alias */
    t.customer_id as transaction_customer_id,

    /* Or use its value to return a more sensible value */
    CASE WHEN t.customer_id IS NULL 
      THEN 'N' 
      ELSE 'Y' END AS has_transaction,
    t.customer_group_id
FROM customer 
LEFT OUTER JOIN customer_transaction ON customer. customer_id = customer_transaction.customer_id 
WHERE customer.customer_group_id = $input
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45815237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档