【问题标题】:Nested select statement in mysql -my code doesn't workmysql中的嵌套select语句-我的代码不起作用
【发布时间】:2016-12-13 20:45:34
【问题描述】:

这是我的查询

SELECT con_serial,column2,column3
 FROM
 (SELECT con_serial,column2,column3
 FROM big_table 
 WHERE ISNULL(contact1, '')+'#'+ISNULL(contact2, '')+'#'+ISNULL(contact3, '')+'#'+ISNULL(contact4, '')+'#'+ISNULL(contact5, '')
 LIKE '%' + '".$conserial."' + '%') AS a
 WHERE con_serial
IN('".$contact1."','".$contact2."','".$contact3."','".$contact4."','".$contact5."')   

在内部选择中,我希望在其 5 列之一中获取具有此值 $conserial 的行(contact1...contact5)

和外部选择从中选择行,它们的列 con_serial 是变量之一 ($contact1...$contact5)

谁能看出这里出了什么问题?

【问题讨论】:

  • 这真是一团糟!首先,您将 PHP(可能)与 SQL 混合,而不是在 PHP 上下文中。然后不清楚$con_serial 或五个$contact1 等是否是选择标准。最后,这里的 ISNULL 是什么意思,#+ 是什么意思?
  • 感谢您的帮助。相信我,如果这是一团糟,我的整个项目就是一场灾难。是的,我正在使用 php,查询将在 php contex 中运行,实际上我对 mysql 有点陌生,我正在使用 isnull() 将 null 值替换为 ` ' ` 我想检查是否有在任何行中的这五列中都包含一个特殊的值$con_serial,如果是这样,得到它们并且当然在外部选择中使用这个结果是否有更好的实现? @cFreed
  • 要准确理解您的需求并不容易:按照您的描述,我发现有点矛盾。似乎:1)在contactN五列中的任何一个中搜索PHP $conserial值; 2) con_serial 列的值应与五个 PHP $contactX 中的任何一个匹配。这可能不是您真正想要的。请详细说明,并向我们展示:1)big_table 结构; 2) 用作标准的 PHP 变量列表。
  • Tnx man 我改变了结构应该早点这样做

标签: mysql nested-select


【解决方案1】:

尽管您采用了新的表述,但仍然非常不清楚。
不过我会尽量给你一个答案,根据我能猜到的......

首先,我将如何重新表述您的需求:

  • 您在 PHP 变量中有一些值:一个 $conserial 和五个 $contact# 其中# 是 1-5
  • 表结构至少包含以下列:con_serialcolumn2column3 和五个contact#,其中# 为1-5
  • 您想选择同时存在的行(这是您需要的最奇怪的部分):
    • 至少有一个 contact# 列与 PHP $conserial 值匹配
    • con_serial 列至少匹配 PHP $contact# 值之一

也就是说,请注意您不需要有两个嵌套的SELECT:您只希望每行满足两个条件,因此它们可以在WHERE 子句中进行与运算。

基于此,您的查询应该是:

$query = "
  SELECT con_serial, column2, column3
  FROM big_table
  WHERE con_serial IN ('$contact1', '$contact2', '$contact3', '$contact4', '$contact5')
  AND '$con_serial' IN (contact1, contact2, contact3, contact4, contact5)
";

【讨论】:

    【解决方案2】:

    我猜 where 子句中的 sum 部分是允许的 我用这样的两个 IN 解决了​​这个问题

    SELECT con_serial,,column2,column3
     FROM(SELECT con_serial,column2,column3
     FROM
      big_table
     WHERE '".$conserial."' IN(contact1,contact2,contact3,contact4,contact5)) a  
      WHERE con_serial IN('".$contact1."','".$contact2."','".$contact3."','".$contact4."','".$contact5."'
    

    这就是我想要的任何方式 Tnx ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 2023-04-03
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2010-09-12
      • 2018-07-28
      相关资源
      最近更新 更多