每次我尝试运行此查询时都会出现此错误
1242 - Subquery returns more than 1 row
SELECT(SELECT numbers.phone FROM numbers WHERE numbers.filename = 'Jan-2013') AS Jan2013,
(SELECT numbers.phone FROM numbers WHERE numbers.filename = 'Dec-2012') AS Dec2012
实际上我不知道问题出在哪里 .
这就是桌面设计 .
CREATE TABLE `numbers` (
`id` int(11) NOT NULL auto_increment,
`phone` varchar(255) NOT NULL,
`phonecalls` int(3) NOT NULL,
`duration` float NOT NULL,
`cost` varchar(10) NOT NULL,
`city` varchar(255) default NULL,
`category` varchar(255) default NULL,
`website` varchar(255) default NULL,
`reported` int(1) NOT NULL default '0',
`filename` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12065 DEFAULT CHARSET=latin1;
2 回答
不确定每个查询是否需要单个结果或每个查询的所有结果,但如果你想要所有结果,这里有一个方法(虽然这不是最快的方法,因为你要查询同一个表两次,但它至少应该得到你的结果):
如果你只想要一个结果,你应该能够使用你已经拥有的代码,除非你必须指定一些东西告诉子查询只返回一个结果(例如
MAX()
或MIN()
):希望有帮助...... :)
我相信你是在经历了这样的查询之后
样本输出:
它将为您提供一个正确排序的结果集,其中包含您可以一次性使用的数据,您可以在php中轻松地进行迭代 .
Another approach 是使用
GROUP_CONCAT
将每个文件名的所有手机打包在一个分隔的字符串中,当您迭代结果集时,您可以轻松地在php中爆炸样本输出:
Now you definitely don't want 在单独的列中获取每个文件名的电话号码 . 你可以通过这样的查询在技术上做到这一点
但这没有任何意义,因为您没有任何公共列,您可以将数据分组而不是行号 .
您的结果集看起来像这样
这是 SQLFiddle 演示