簡體   English   中英

MYSQL一對多關系推入數組

[英]MYSQL one-to-many relationship pushing into array

我正在查詢數據庫

    $query="SELECT com.id, com.name, ctx.LastName, ctx.FirstName, com.company_phone,addr.City, addr.Street ";
    $query.="FROM Connections as con ";
    $query.="LEFT JOIN Companies as com on con.company_id = com.id ";
    $query.="LEFT JOIN Contacts as ctx on con.contact_id = ctx.id ";
    $query.="LEFT JOIN addresses as addr on addr.id = com.Legal_address ";
    if($value['db']=='companies') $query.="WHERE LOWER(com.".$value['model'].") RLIKE LOWER('".$value['val']."')";
    else if($value['db']=='contacts') $query.="WHERE LOWER(ctx.FirstName) RLIKE LOWER('".$value['val']."') OR LOWER(ctx.LastName) RLIKE LOWER('".$value['val']."')";
    else if($value['db']=='addresses') $query.="WHERE LOWER(addr.City) RLIKE LOWER('".$value['val']."') OR LOWER(addr.Street) RLIKE LOWER('".$value['val']."')";

然后將結果發送回客戶端。 結果,我可以看到例如:

[
 {
  id:1,
  name: google,
  contact: Smith,
  ....
 },
 {
  id:1,
  name: google,
  contact: Black,
  ....
 },
 {
  id:2,
  name: microsoft,
  contact: Walker,
  ....
 }
 ....

但是我不希望看到重復的行,而是看到存在一對多關系的數組。 就像第二個例子:

[
 {
  id:1,
  name: google,
  contact: [Smith, Black],
  ....
 },

 {
  id:2,
  name: microsoft,
  contact: Walker,
  ....
 }
 ....

我對SQL的了解非常糟糕。 我已經被告知, WHERE + JOIN是一種不好的心情。 因此可以更改我的查詢,使其類似於第二個示例。

PS這兩個數組我寫json格式的結構時,我將響應發送回客戶端。

您可能需要獲取數據並創建所需的陣列。

    $data = array();
    foreach ($result as $fields) {
        $key = $fiels['name']; // or $item['info_id']
        if (!isset($data[$key])) {
            $data[$key] = array();
        }

        $data[$key][] = $field;
    }

// Build your table with the new $data array

這只是一個例子。 指出的是,如果您的姓名字段不是唯一的,則需要在唯一鍵上構建數組。 與此沒有太大的不同,因為您可能只是將$field['name']實例更改為$field['info_id']

$query="SELECT com.id, com.name, CONCAT('[',GROUP_CONCAT(ctx.LastName),']') AS contact, ctx.LastName, ctx.FirstName, com.company_phone,addr.City, addr.Street ";
$query.="FROM Connections as con ";
$query.="LEFT JOIN Companies as com on con.company_id = com.id ";
$query.="LEFT JOIN Contacts as ctx on con.contact_id = ctx.id ";
$query.="LEFT JOIN addresses as addr on addr.id = com.Legal_address ";
if($value['db']=='companies') $query.="WHERE LOWER(com.".$value['model'].") RLIKE LOWER('".$value['val']."')";
else if($value['db']=='contacts') $query.="WHERE LOWER(ctx.FirstName) RLIKE LOWER('".$value['val']."') OR LOWER(ctx.LastName) RLIKE LOWER('".$value['val']."')";
else if($value['db']=='addresses') $query.="WHERE LOWER(addr.City) RLIKE LOWER('".$value['val']."') OR LOWER(addr.Street) RLIKE LOWER('".$value['val']."')";
$query .= " GROUP BY com.id ";

我從您的輸出JSON假定LastName列為Contact

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM