我在看教程。有一个代码,我不明白应该做什么。
$sql = 'SELECT p.*,
a.screen_name AS author_name,
c.name AS category_name
FROM
posts p
LEFT JOIN
admin_users a ON p.author_id = a.id
LEFT JOIN
categories c ON p.category_id = c.id
WHERE
p.id = ?';
我读到了左连接,但我不理解它们。有人可以解释一下我分享的代码。 提前致谢!
答案 0 :(得分:2)
想象一下,你有两张桌子。一个用于存储有关您网站上程序员的信息,另一个用于跟踪他们的在线购买情况。
程序员表
+--------------------------------------------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Desire | 32 | 123 fake s| 3000.00 |
| 2 | Jamin | 25 | 234 fake s| 2500.00 |
| 3 | Jon | 23 | 567 fake s| 2000.00 |
| 4 | Bob | 30 | 789 fake s| 1500.00 |
| 5 | OtherGuy | 31 | 890 fake s| 1000.00 |
| 6 | DudeMan | 32 | 901 fake s| 500.00 |
+--------------------------------------------+
购买表
+---------------------------------------------+
| ORDER_ID | PROG_ID | DATE | PRICE |
+-------------+---------+---------------------|
| 1 | 1 | 1-1-2017 | 100 |
| 2 | 2 | 1-2-2017 | 200 |
| 3 | 6 | 1-3-2017 | 300 |
+---------------------------------------------|
您决定需要创建一个新表来将此信息合并到包含的表中 你想要的某些列。
例如,您认为为了运输目的而拥有一张桌子会很不错 具有ID,NAME,PRICE和DATE列。
目前,我们的表格并未在一个表格中显示所有内容。
如果我们要LEFT JOIN这些表,我们最终将填充所需的列 如果没有要加入的信息,则为NULL值。
SELECT ID, NAME, PRICE, DATE
FROM PROGRAMMERS
LEFT JOIN PURCHASES
ON PROGRAMMERS.ID = PURCHASES.PROG_ID;
请注意,我从起始表中选择了我想要的列,然后加入了右表 即使可能缺少信息。
结果表
+-------------------------------------+
| ID | NAME | PRICE | DATE |
+----+----------+-----------------+---+
| 1 | Desire | 100 | 1-1-2017 |
| 2 | Jamin | 200 | 1-2-2017 |
| 3 | Jon | NULL | NULL |
| 4 | Bob | NULL | NULL |
| 5 | OtherGuy | NULL | NULL |
| 6 | DudeMan | 300 | 1-3-2017 |
+-------------------------------------+
有关SQL JOIN之间差异的直观表示,请查看 https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins。