当前位置: 代码迷 >> PHP >> 如何样查找同一姓名的数据
  详细解决方案

如何样查找同一姓名的数据

热度:156   发布时间:2016-04-28 18:35:51.0
怎么样查找同一姓名的数据?
表A
id     name      kemu
1        张龙    作文
2        张龙    数学
3        李四    作文
5        王五    作文
6        赵虎    数学
7        赵虎    口才
8        赵虎    珠心算

请问怎么用SQL语句查找出张三和赵虎
<form...........>
<input name="dk" id="dk" value="1" type="checkbox" {if $xueqi gt '0'}checked="checked"{/if} /> 多科
<input name="sou" type="submit" class="ann10" value="搜索" />
</form>
点击上面的搜索后显示为:
1      张龙
2      赵虎
------解决方案--------------------
drop table A;

create table A (
  id int,
  name varchar(10),
  kemu1 varchar(10)
) charset=gbk;

set names gbk;

insert into A values
  (1, '张龙', '珠心算'),
  (2, '张龙', '口才'),
  (3, '赵虎', '珠心算'),
  (4, '赵虎', '作文'),
  (5, '王朝', '数学'),
  (6, '王朝', '数学'),
  (7, '马汉', '绘画');

select DISTINCT A.name
  from A,
    (select name, group_concat(kemu1 order by kemu1) as klist from A group by name HAVING count(DISTINCT kemu1)>1) B
  where find_in_set(A.kemu1, B.klist)
name 
张龙 
赵虎 

------解决方案--------------------

SELECT name FROM t_xuanke
WHERE id in( SELECT id FROM t_xuanke GROUP BY name,kemu1 HAVING count(*)<=1 )
GROUP BY `name`
HAVING COUNT(*)>1

1.先去掉相同名字,科目1也相同的记录
2.找出多个name的记录

lz,你这张表原本是想储存学生的选课情况,用“建对值”的设计是好的,为何后面会延伸那么多科目呢?很多复杂低效率的sql就是从不合理的表设计开始的!
  相关解决方案