【问题标题】:Find table name that value is in? Mysql PHP查找值所在的表名? mysql PHP
【发布时间】:2015-01-21 01:01:55
【问题描述】:

我有 3 个表,tfQuestions、oeQuestions、MultQuetsions,我有一个具体的问题,我想看看它在哪个表中。有什么具体的查询可以用来做这个吗?如果没有,我可以使用 if else 搜索:

if 

 SELECT question From tfquestion WHERE question = $question  { if true do this}

else if

 SELECT question From oequestion WHERE question = $question  { if true do this}

else if

 SELECT question From multquestion WHERE question = $question  { if true do this}

【问题讨论】:

  • 你的方法是正确的。
  • 使用内部 UNION 查询,并在包装​​ SELECT 上进行比较。
  • 数据建模是有问题的恕我直言。任何你不能把所有东西都放在一个叫做QUESTION的表中的原因,然后每条记录都有一个表示类型的列(即multi_choice、true_false、'whatever oe')。你会考虑对数据进行重构吗?
  • @mario UNION 查询会得到他的记录,但它不会给他他寻找的信息,即记录来自哪个表。
  • 有什么不同的方法吗?

标签: php mysql database datatable


【解决方案1】:

要找出问题来自哪个表,您只需为每个查询选择一个文字标识字符串:

 SELECT 'tf' AS tbl_name, question FROM tfquestions

接下来在 UNION 和外部驱动程序查询中连接三个表:

SELECT tbl_name, question
FROM (
      SELECT 'tf' AS tbl_name, question FROM tfquestions
    UNION ALL
      SELECT 'oe' AS tbl_name, question FROM oequestions
    UNION ALL
      SELECT 'mult' AS tbl_name, question FROM multquestions
)
WHERE question = :question

因此您实际上只需要一个数据库查询,但要获取匹配的问题和它的原始表名。

但请考虑@rurouni88 所说的话;如果表的结构相同,则重组数据库方案可能是有意义的。至少您可以使用 UNION 方法在您的表上创建一个VIEW

【讨论】:

  • 啊,您最初的 cmets 对我来说没有意义,因为您最初没有提到封装 UNION,但现在很清楚,对解决方案感到满意 :)
猜你喜欢
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多