[英]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.