【问题标题】:How do I join 2 tables? [duplicate]如何加入 2 张桌子? [复制]
【发布时间】:2017-08-02 09:24:19
【问题描述】:

我有 2 个表要连接在一起,其中第二个表的 id 与第一个表的 id 匹配,并作为行一起输出。

第一个表是“boys”,有一列“id”和“name”。
第二个表是“girls”,有一列“id”和“name”。

在 PHP 中输​​出时,如何让匹配的 id 作为单行加入?我完成了关于连接的整个基本 SQL 教程,并且由于某种原因无法理解逻辑。有什么帮助吗?

$result = mysql_query("
SELECT *
FROM boys
LEFT JOIN girls
WHERE boys.id = girls.id
");

警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在第 28 行的 C:\xampp\htdocs\xampp\main3.php 中给出

【问题讨论】:

  • @Virb mysql_ 不需要连接变量来执行查询。
  • 我知道,但我想确保它在 PHP 中正确输出。我正在我的 XAMPP localhost 上测试所有这些。

标签: php mysql sql join


【解决方案1】:

你想加入哪个。如果你更喜欢内部连接,那么试试这个

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

左连接

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

右加入

SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;

【讨论】:

  • 您能否详细说明这些连接之间的区别? OP 正在努力理解这一点
  • 你能用我的表/列名把它翻译成代码吗?
  • (INNER) JOIN:返回两个表中匹配值的记录 LEFT (OUTER) JOIN:从左表返回所有记录,从右表返回匹配的记录 RIGHT (OUTER) JOIN:返回右表中的所有记录,以及左表中匹配的记录谢谢
  • 那是我反复阅读的教程。好吧,无论如何谢谢哈克!
  • 你是男生表中的girl_id吗?
【解决方案2】:

您只提供了您的查询,使用起来相当简单。

根据你的错误,你给 mysql_fetch_array 一个布尔值,这是不正确的。

你给 mysql_fetch_array 一个布尔值的原因当然是你的查询失败了,你仍然把它传递给 mysql_fetch_array 而不检查它返回的有效性。

无论如何,仅仅使用 mysql_fetch_array 和其他 mysql_* 函数本身就是一个安全漏洞。您应该尽快迁移到 PDO。

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT b.*, c.* FROM boys b, girls c WHERE b.id=c.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多