【问题标题】:PHP, MYSQL - joining 2 tables where 1 table has multiple entries of primary keyPHP,MYSQL - 加入 2 个表,其中 1 个表具有多个主键条目
【发布时间】:2014-05-12 13:00:50
【问题描述】:

我有 2 个表,我想通过 php 中的 mysql_query 选择它们。

  • 表1

列:specialID、Name、Information、Start、created、byUser、ziparea

  • 表2

列:ID、ziparea、cusID、标题、联系人、邮件

$result = mysql_query("SELECT * FROM table1 JOIN table2 ON table1.ziparea = table2.ziparea WHERE table1.specialID='".$_REQUEST["specialID"]."'");
while($var = mysql_fetch_array($result)) {
}

table1 对从 01 到 99 的每个 ziparea 有 1 个条目。table2 有多个 zipareas 条目。

似乎发生的问题是结果似乎是这样的:

  • table1-data --- data1 ---- data1 --- data1
  • ziparea -------- 24 -------- 24 -------- 24
  • table2-data --- data1 ---- data2 --- data3

表示 table1 的数据被复制。我希望单元格为空,因为如果我在 php 中请求 table1.Name,

<?php echo utf8_encode($var["Name"]); ?>

它应该只提供 1 个数据...现在它带有我需要的那个数据的 3 个副本。

我该如何解决这个问题?

【问题讨论】:

  • 在本例中,您甚至不需要第二张表:从 table1 中选择名称,其中 specialID =...

标签: php sql join multiple-columns full-outer-join


【解决方案1】:

尝试将GROUP BY 添加到您的 SQL 查询中,例如:

$result = mysql_query("SELECT table1.Name FROM table1 JOIN table2 ON table1.ziparea = table2.ziparea WHERE table1.specialID='".$_REQUEST["specialID"]."' GROUP BY table1.Name");

【讨论】:

  • select * 不会工作,使用 select table1.name ;)
  • 现在它只提供 table1 中的多个数据,但它也只提供 table2 的 1 个数据,我需要 ziparea 列中的所有数据
  • 您的问题说您获得了 3 个数据副本并且您只需要一个,GROUP BY 语句可以解决这个问题。您是说您确实需要所有 3 个“副本”吗?
  • 不,例如说 ziparea 是 24 table1 只有 1 行 ziparea 是 24 table2 有 4 行 ziparea 是 24 .. 如果我加入他们,table2 将有 4rows 和 ziparea 24似乎 table1 填满了 3 行,实际上它没有数据
  • 我需要table1中的所有数据和table 2中的所有数据从0开始,也许我运行了错误的查询,我不知道:我需要table1中的所有数据,其中specialID = Request(specialID) table1 也给了我 ziparea(例如 24)现在我在 table2 中有多个条目,其中 ziparea 是 24,我需要所有这些条目
猜你喜欢
  • 1970-01-01
  • 2022-10-03
  • 2014-11-16
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
相关资源
最近更新 更多