mysql 中的嵌套 select 语句 - 我的代码不起作用
Nested select statement in mysql -my code doesn't work
这是我的查询
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."')
在内部 select 我希望在其 5 列(contact1...contact5)
之一中获得具有此值 $conserial
的行
和外部 select 从中选择行,它们的列 con_serial
是变量之一 ($contact1...$contact5)
有人能看出这里出了什么问题吗?
我猜 where 子句中的总和部分是不允许的
无论如何我已经通过使用两个 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 的地方 ;)
尽管你有新的表述,但仍然很不清楚。
不过,我会根据我的猜测尝试给你一个答案...
首先,我将如何重新表述您的需求:
- 你在 PHP 变量中有一些值:一个
$conserial
和五个 $contact#
其中 #
是 1-5
- table 结构至少包含以下列:
con_serial
、column2
、column3
和五个 contact#
,其中 #
是1-5
- 你想要 select 两行(这是你需要的最奇怪的部分):
- 至少有一个
contact#
列匹配 PHP $conserial
值
con_serial
列至少匹配 PHP $contact#
值之一
也就是说,请注意您不需要有两个嵌套的 SELECT
:您只希望每一行都满足两个条件,因此它们可以在 WHERE
子句中进行 AND 运算。
基于此,您的查询应该是:
$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)
";
这是我的查询
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."')
在内部 select 我希望在其 5 列(contact1...contact5)
之一中获得具有此值$conserial
的行
和外部 select 从中选择行,它们的列 con_serial
是变量之一 ($contact1...$contact5)
有人能看出这里出了什么问题吗?
我猜 where 子句中的总和部分是不允许的 无论如何我已经通过使用两个 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 的地方 ;)
尽管你有新的表述,但仍然很不清楚。
不过,我会根据我的猜测尝试给你一个答案...
首先,我将如何重新表述您的需求:
- 你在 PHP 变量中有一些值:一个
$conserial
和五个$contact#
其中#
是 1-5 - table 结构至少包含以下列:
con_serial
、column2
、column3
和五个contact#
,其中#
是1-5 - 你想要 select 两行(这是你需要的最奇怪的部分):
- 至少有一个
contact#
列匹配 PHP$conserial
值 con_serial
列至少匹配 PHP$contact#
值之一
- 至少有一个
也就是说,请注意您不需要有两个嵌套的 SELECT
:您只希望每一行都满足两个条件,因此它们可以在 WHERE
子句中进行 AND 运算。
基于此,您的查询应该是:
$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)
";