原数据库table存储类似于下面的信息有好多记录
通过select l1,l2,l3,l4,l5 from table 可以得到如下数据1 2 3 4 5
1 3 8 14 16
16 18 22 24 26
15 14 23 28 30
26 28 30 31 33现在希望从这5条记录中按如下限定输出,即$arr=array(1,8,14,20,22,24,26,29,30,31,32,33),求在$arr中至多出现2个数字的记录是什么,当然可以选择从上面得出的记录中选,如果能在select的where条件中限定就更好了。先行谢过啦!~~~
通过select l1,l2,l3,l4,l5 from table 可以得到如下数据1 2 3 4 5
1 3 8 14 16
16 18 22 24 26
15 14 23 28 30
26 28 30 31 33现在希望从这5条记录中按如下限定输出,即$arr=array(1,8,14,20,22,24,26,29,30,31,32,33),求在$arr中至多出现2个数字的记录是什么,当然可以选择从上面得出的记录中选,如果能在select的where条件中限定就更好了。先行谢过啦!~~~
解决方案 »
- 为什么php设定php mysql_query(set names utf-8)后,中文还是乱码
- 关于:array_walk_recursive
- IIS下写文件失败
- 关于php上传大文件的问题
- 我想做这么件事,http://xxxxxx/save.php?1234556890abcm之后,把1234567890abcm这些save.php带的参数保存到服务器上当前目录下的save.tx
- 新手请教:为什么不能直接用变量名得到表单中的数据?
- 检索问题
- curl_exec() has been disabled for security reasons
- while嵌套while只输出一次?
- php如何实现复选框选中的批量下载并按照标题名字来保存成文件名。
- JS 代码转 PHP 谢谢
- zencart里面一个notify函数问题
记录中至多包含数组$arr=array(1,8,14,20,22,24,26,29,30,31,32,33)里的一堆数字中至多有2个出现
,
第1组1 2 3 4 5 出现一个1,符合条件
第2组1 3 8 14 16 出现1,8,14,不符合
第3组16 18 22 24 26 出现24,26,只有2个符合
第4组15 16 23 28 3 出现0个符合
第5组26 28 30 31 33 出现26 30 31 334个不符合条件
不知道我这样说清楚不?
SELECT * FROM(SELECT *,(if(find_in_set(a, '1,8,14,20,22,24,26,29,30,31,32,33'), 1, 0) + if(find_in_set(b, '1,8,14,20,22,24,26,29,30,31,32,33'), 1, 0) + if(find_in_set(c, '1,8,14,20,22,24,26,29,30,31,32,33'), 1, 0) + if(find_in_set(d, '1,8,14,20,22,24,26,29,30,31,32,33'), 1, 0) + if(find_in_set(e, '1,8,14,20,22,24,26,29,30,31,32,33'), 1, 0) ) cnt FROM (SELECT 1 a, 2 b, 3 c, 4 d, 5 e union all
SELECT 1, 3, 8, 14, 16 union all
SELECT 16, 18, 22, 24, 26 union all
SELECT 15, 14, 23, 28, 30 union all
SELECT 26, 28, 30, 31, 33) t) s WHERE cnt<=2
结果
1 2 3 4 5 [1]
15 14 23 28 30 [2]
mysql_select_db('test');
mysql_query('DROP TABLE IF EXISTS tset');
mysql_query('
CREATE TABLE IF NOT EXISTS test (
id int(11) NOT NULL AUTO_INCREMENT,
l1 varchar(2) NULL,
l2 varchar(2) NULL,
l3 varchar(2) NULL,
l4 varchar(2) NULL,
l5 varchar(2) NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
');
mysql_query('TRUNCATE TABLE test');
mysql_query("insert into test (l1, l2, l3, l4, l5) values
('1', '2', '3', '4', '5'),
('1', '3', '8', '14', '16'),
('16', '18', '22', '24', '26'),
('15', '16', ' 23', '28', '3'),
('26', '28', '30', '31', '33')
");$arr = array(1,8,14,20,21,24,26,29,30,31,32,33);
$s = "select '" .join("' as ch union all select '", $arr) . "'";$sql = "select count(*) as cnt, a.* from
(select id, concat(l1,',',l2,',',l3,',',l4,',',l5) as p from test) a
left join
($s) b
on find_in_set(b.ch, a.p) group by a.id HAVING cnt<3";
$rs = mysql_query($sql) or die(mysql_error());
while($r = mysql_fetch_assoc($rs)) {
echo join(', ', $r), PHP_EOL;
}
1, 1, 1,2,3,4,5
2, 3, 16,18,22,24,26
1, 4, 15,16, 2,28,3