【问题标题】:Join two tables and ignore data in duplicate columnsPHP MYSQL 连接两个表
【发布时间】:2015-12-07 11:40:39
【问题描述】:

我有两张桌子machine_infoparts_repalced

machine_info

id | machine_name | desc | date_added | parts_ref
1  | printer      | desc1| 09/09/15   | 7

parts_replaced

id | machine_ref_id | partno | qty
1  | 7              | KFRy23 | 2
2  | 7              | RY7RA1 | 4

现在我希望它像这样加入并显示

id | machine_name | desc | date_added | partno | qty
1  | printer      | desc1| 09/09/15   | KFRy23 | 2
                                      | RY7RA1 | 4

这是我到目前为止所做的......

$result = $db->query("SELECT * FROM machine_info LEFT OUTER JOIN parts_replaced ON machine_info.id = parts_replaced.machine_ref_id");

$data = "";
while($r = $result->fetch_object()) {
    if ($data != "") {$data .= ",";}
    $data .= '{"id":"'  . $r->id . '",';
    $data .= '"machine_name":"'   . $r->machine_name. '",';
    $data .= '"desc":"'   . $r->desc. '",';
    $data .= '"date_added":"'   . $r->date_added. '",';
    $data .= '"partno":"'   . $r->partno. '",';
    $data .= '"qty":"'. $r->qty. '"}'; 
    }
    $result->free();
$data ='{"records":['.$data.']}';
$db->close();
echo($data);

结果的问题是它给了我一个重复的结果

任何帮助将不胜感激。提前谢谢..

【问题讨论】:

  • 嗨。你放了php 标签,但我没有看到任何 php 问题。也许您想添加更多信息?
  • 只需添加一个 DISTINCT 子句,像这样SELECT DISTINCT machine_info.id, machine_info.desc, parts_replaced.partno FROM machine_info LEFT OUTER JOIN ...etc
  • 嗨@SergeyChizhik 我更新了信息..
  • 乍一看我没有答案,主要是因为我真的不明白“给我一个重复的结果”是什么意思 - 你能发布你得到的表格是什么样的吗?我喜欢你格式化表格的方式和你想要得到的东西,我还想看看你得到了什么来更好地理解这个问题。
  • id | machine_name | desc | date_added | partno | qty 1 | printer | desc1 | 09/09/15 | KFRy23 | 2 1 | printer | desc1 | 09/09/15 | RY7RA1 | 4 这就是我得到的@CBRF23

标签: php join mysqli


【解决方案1】:

听起来您的联接中缺少一个或多个关键字段。如果没有,您应该考虑添加 GROUP BY 子句或选择 DISTINCT。

【讨论】:

  • DISTINCT 无济于事,因为每行的 partnoqty 都不同。而GROUP BY 将省略第二个partno 的行。
【解决方案2】:

在查询中使用ORDER BY machine_ref_id,这样同一台机器的所有行都会放在一起。然后更改您的显示代码,如果machine_ref_id 与前一行相同,则它会在前 4 列中放置空白。

您也可以在创建 JSON 的代码中执行此操作,方法是在这些字段中放置空格:

$last_id = null;
$results = array();
while ($r = $result->fetch_object()) {
    if ($r->id === $last_id) {
        $results[] = array(
            'id' => '',
            'machine_name' => '',
            'desc' => '',
            'date_added' => '',
            'partno' => $r->partno,
            'qty' => $r->qty
        );
    } else {
        $results[] = array(
            'id' => $r->id,
            'machine_name' => $r->machine_name,
            'desc' => $r->desc,
            'date_added' => $r->date_added,
            'partno' => $r->partno,
            'qty' => $r->qty
        );
        $last_id = $r->id;
    }
}
$db->close();
echo json_encode(array('records' => $results));

【讨论】:

  • 让我试试这个@Barmar
猜你喜欢
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多