php关于mysql的一个问题.

ffvsnn520 发布于 2013/12/09 21:23
阅读 196
收藏 0

如下所示:

    select fid as id from 表B where id =  1 的得出的结果为(1,2,3);

    select keywords from 表A  where fid in (select fid as id from 表B where id =  1);这个只能得出1的数据.其实我想要的是类似于下面的数据.为什么后面的select明明查询的的确是1,2,3,但是得出的结果却只有1条.请各位帮帮忙.

    select keywords from 表A  where fid in (1,2,3);

   

加载中
0
紫川录
紫川录

1、select fid as id from 表B where id =  1 的得出的结果为(1,2,3);  得到的结果是二维数组

2、分两步,得出结果,拼接 ,再IN

f
ffvsnn520
这种没办法一句话写出来吗?为什么了?后面的查询结果明明也是1,2,3啊.为什么要拆成两句了?
0
爆炸
爆炸
select a.keywords
from 表A as a
left join 表B as b
on b.fid = a.fid
and b.id = 1



试试这个呢?MYSQL的in结合子查询效率较低。

另外你是否列名写错了,按照你给出的语句我本地测试可以查出fid为1,2,3的行。

f
ffvsnn520
你好.后面的表查出来的数据为fid = (1,2,3),或则fid=(2,3,3),前面一个fid为自增.所以这种方法不行的.
0
fengyqf
fengyqf
贴源码,肯定你的代码不是PHP+MySQL这么回事,用了什么框架之类
f
ffvsnn520
我就是在本地写的啊.in(里面的select查询出来的数据明明就是1,2,3).但是现实的就是一条.不清楚是什么情况.
0
yak
yak

框架生成的sql都很难优化,数据规模和访问量一上去,就歇菜了


0
hnynes
hnynes

select keywords from 表A  where fid in (1,2,3);

你确定这个查询得出的结果是有fid = 1,2,3的结果,而不是只有1的.  也就是说你是否确定你的数据表A中只有fid为1对应的数据,对于2与3没有数据.

f
ffvsnn520
都有数据.
0
hnynes
hnynes

引用来自“hnynes”的答案

select keywords from 表A  where fid in (1,2,3);

你确定这个查询得出的结果是有fid = 1,2,3的结果,而不是只有1的.  也就是说你是否确定你的数据表A中只有fid为1对应的数据,对于2与3没有数据.

CREATE TABLE `ta` (
  `keywords` varchar(10) DEFAULT NULL,
  `fid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `tb` (
  `fid` int(11) NOT NULL,
  `id` int(11) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into tb values(1, 1),(2,1),(3,1);
insert into ta values('test1', 1),('test2', 2),('test3', 3);

select * from tb;
select * from ta;

select keywords from ta where fid in (select fid as id from tb where id = 1);

执行结果如下:

mysql> select * from tb;
+-----+------+
| fid | id   |
+-----+------+
|   1 |    1 |
|   2 |    1 |
|   3 |    1 |
+-----+------+
3 rows in set (0.00 sec)

mysql> select * from ta;
+----------+-----+
| keywords | fid |
+----------+-----+
| test1    |   1 |
| test2    |   2 |
| test3    |   3 |
+----------+-----+
3 rows in set (0.00 sec)

mysql> select keywords from ta where fid in (select fid as id from tb where id =
 1);
+----------+
| keywords |
+----------+
| test1    |
| test2    |
| test3    |
+----------+
3 rows in set (0.00 sec)

我用的mysql版本是 x64 5.5.25 MySQL Community Server (GPL)

返回顶部
顶部