【问题标题】:PHP MySQL: Get data from one column but by using id from different columns in separate tablePHP MySQL:从一列获取数据,但使用单独表中不同列的id
【发布时间】:2019-05-10 23:13:37
【问题描述】:

这就是我遇到的问题。我有两个单独的表 TableA 和 TableB,TableA 有四列,TableB 有两列。 TableA 只保存 id,而 TableB 保存 id 和字符串。所以我需要来自 TableB 的字符串,但基于 TableA 的 id

例如:

表A:

+------+------+-------+------+
| m_id | appi | mainy | desy |
+------+------+-------+------+
| 1    | 6    | 9     | 13   |
+------+------+-------+------+
| 2    | 7    | 10    | 14   |
+------+------+-------+------+
| 3    | 8    | 12    | 15   |
+------+------+-------+------+

表B

+------+-------+
| t_id | str   |
+------+-------+
| 6    | dude  |
+------+-------+
| 10   | bro   |
+------+-------+
| 9    | lol   |
+------+-------+
| 14   | homie |
+------+-------+

根据上面的表格,我需要根据 TableB 中的 id 找出实际的字符串,例如 SELECT str FROM TableB WHERE t_id = (Ids from TableA WHERE m_id=1)。所以我的预期数据应该是“dude”和“lol”,因为m_id=1 有两个 id 6 和 9,而 TableB 中的那些 id 有字符串“dude”和“lol”。如果有任何困惑,我将非常感谢您的帮助和抱歉,请告诉我,我会尽力解决。

【问题讨论】:

  • 坦率地说,这个数据库设计很糟糕。您应该首先对数据进行规范化,这样您就没有一个表 (TableB),其中的数据不可预测地对应于另一个表 (TableA) 中的 3 个不同列。

标签: php mysql sql


【解决方案1】:

您可以使用 TableB 到 TableA 的简单 JOIN 来执行此操作,其中对于给定的 m_id,TableB 中的 t_id 必须是 TableA 中的 appimainydesy 的值之一:

SELECT b.str
FROM TableB b
JOIN TableA a ON b.t_id IN (a.appi, a.mainy, a.desy)
WHERE a.m_id = 1

输出:

str
dude
lol

Demo on dbfiddle

【讨论】:

  • 在大表上,这会比“exists”函数慢。
  • @cornel.raiu 在大表上,EXISTS 函数将变得非常慢,因为必须为表中的每一行计算 WHERE 条件。
  • 你是对的。刚刚对这个案例做了一个快速的基准测试。事实证明,当使用子查询时,Join 比 EXISTS 快得多。为你 +1 :)
  • 老兄尼克!你真棒!这对我来说完全没问题。谢谢!!
【解决方案2】:

您可以将exists 用于这种类型的逻辑:

select b.str
from tableb b
where exists (select 1
              from tablea a
              where a.m_id = 1 and
                    b.t_id in (a.appi, a.mainy, a.desy)
             );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多