簡體   English   中英

如何選擇兩個表的MySQL使用PHP

[英]how to select two table mysql use php

例如:我有兩個表:表1:

 ________________________________
| ID | name          | born      |
|--------------------------------|
| 1  | David         | 1987      |
| 2  | Michale       | 1998      |
| 3  | Mary          | 1995      |
 --------------------------------

表2

 _________________________________
| userID | Key        | value     |
 ---------------------------------
| 2      | D of Birth | 20-07     |
| 2      | sex        | M         |
| 3      | D of Birth | 12-09     |
| 3      | sex        | FM        |
| 1      | D of Birth | 20-01     |
| 1      | sex        | M         |
 ---------------------------------

我如何選擇並添加為數組:

Array 
  [0]
     [ID] = 1
     [name] = David
     [born] = 1987
     [D o Birth] = 20-01
     [sex] = M
  [1]
     [ID] = 2
     [name] = Michale
     [born] = 1998
     [D o Birth] = 20-07
     [sex] = M
  ...

我不知道他們為什么不簡單地使用一張桌子? 兩個表都更快查詢? 非常感謝!

您需要一個交叉表 使用交叉表,行可以變成列,反之亦然。

不幸的是,MySQL沒有交叉表支持。 因此,您需要創建一個自定義查詢:

SELECT user.*, dofbirth.value AS `D of Birth`, sex.value AS sex
  FROM user
    LEFT JOIN userprop AS dofbirth
      ON dofbirth.key = 'D of Birth' AND user.id = dofbirth.userID
    LEFT JOIN userprop AS sex
      ON sex.key = 'sex' AND user.id = `sex`.userID

您需要預先知道各列,因此需要預先知道userprop表的鍵。


您可以通過查詢獲取所有鍵

SELECT DISTINCT key FROM userprop

比您需要遍歷PHP中的鍵並建立交叉表查詢。

$result = $db->query("SELECT DISTINCT key FROM userprop");

$cols = ["user.*"];
$from = "user";

while (list($key) = $result->fetch_row()) {
  $table = strtolower(preg_replace('/\W/', $key));

  $cols[] = "{$table}.value AS `" . str_replace('`', '', $key) . "`";
  $from .= " LEFT JOIN userprop AS `{$table}` ON `{$table}`.key = \"" . $db->real_escape_string($key) . "\" AND `{$table}`.userID = user.id"; 
}

$query = "SELECT " . join(', ', $cols) . " FROM " . $from;
...

暫無
暫無

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

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