【问题标题】:Interaction between two tables ID-Name两个表ID-Name之间的交互
【发布时间】:2020-03-15 22:39:48
【问题描述】:

早上好,

我应该交叉两个表,使公司的名称出现在一个表中。

例子:

用户表:
ID - 用户名 - WHATICANSEE
1 |用户 | 1,2,3

公司表:
ID - NAMECOMPANY
1 |萝卜
2 |苹果
3 |马铃薯

“Whaticansee”包含类似于“1,2,3”的值,相当于“ID”公司表。 这是我的代码:

function TabDipendenti(){
require 'db.php';
$result = $mysqli->query("SELECT * FROM users");
//CODE CREATE <TABLE>
while($row = mysqli_fetch_array($result)){
echo "<td><a href=/az.php?id=" . $row['WHATICANSEE'] . ">". $row['WHATICANSEE'] ."</a></td>";
}
//CODE </TABLE>
}

所以我需要从“WHATICANSEE”的选择中输出“NAMECOMPANY”(具有多 ID 的值)。 现在的输出是:

1 - User - 1,2,3 

但正确的流程是:

1 - User - Carrots,Apple,Potato

感谢您的帮助。

【问题讨论】:

  • 您应该创建一个关联表 (EMPLOYEE?),其中包含两个字段:USER_IDCOMPANY_ID。那你只需要查询:SELECT u.USERNAME, c.NAMECOMPANY FROM USER u INNER JOIN EMPLOYEE e ON e.USER_ID = u.ID INNER JOIN COMPANY ON e.COMPANY_ID = c.ID你能设计数据库表吗?
  • 所以不改变 ID 名称表是正确的:SELECT * FROM USER AS u JOIN COMPANY AS c WHERE c.id=u.id 是正确的吗?但我不明白如何为回显名称而不是 ID 交互变量“whaticansee”和“namecompany”
  • 我不确定。我猜每个 ID 只是表格的“行号”。对我来说,这是一个 SQL 问题。请了解 SQL 连接的工作原理 => w3schools.com/sql/sql_join.asp 连接外键不是一个好习惯。

标签: php function output


【解决方案1】:

你可以替换你的:

SELECT * FROM users

稍微复杂一点:

SELECT
   ID,
   USERNAME,
   (SELECT GROUP_CONCAT(NAMECOMPANY) FROM `company` AS c WHERE FIND_IN_SET(c.id, u.WHATICANSSEE)) AS WHATICANSEE
FROM `users` AS u;

应该给出以下结果:

+----+----------+----------------------+
| ID | USERNAME | WHATICANSEE          |
+----+----------+----------------------+
|  1 | User     | Carrots,Apple,Potato |
+----+----------+----------------------+

【讨论】:

  • 真的谢谢你,这就是我搜索的内容。我会“研究”这个函数。
  • 你知道为什么我的输出被削减了吗?会不会太长了?
  • 是的,GROUP_CONCAT 的最大长度由 group_concat_max_len 服务器系统变量定义。这可以在运行时在 SELECT 查询之前使用 SET SESSION group_concat_max_len=xxx 进行更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
相关资源
最近更新 更多