请问这个语句怎么写?GROUP BY 好像不行

windbrick 2007-03-06 09:26:55
name age sex add
张三 15 男 北京
李四 15 男 北京
赵二 14 女 上海
无名 14 男 天津
王五 14 男 天津
钱六 14 女 上海

把age,sex,add相同的分成一组,并且能够显示出组内每个name
上面应该能分成3组,
第一组有2条记录,记录1:张三,2:李四
第二组有2条记录,记录1:赵二,2:钱六
第三组有2条记录,记录1:无名,2:王五

请问应该怎么做呢?数据库是mysql,取出来到数组的方式可以做到嘛?谢谢了.
...全文
206 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
windbrick 2007-03-06
  • 打赏
  • 举报
回复
多谢wxcyz(阿图),我来试试.
wxcyz 2007-03-06
  • 打赏
  • 举报
回复
得出的结果:
Array
(
[1] => Array
(
[1] => Array
(
[0] => 1
[id] => 1
[1] => a
[name] => a
[2] => 15
[age] => 15
[3] => na
[sex] => na
[4] => bj
[addr] => bj
)

[2] => Array
(
[0] => 2
[id] => 2
[1] => b
[name] => b
[2] => 15
[age] => 15
[3] => na
[sex] => na
[4] => bj
[addr] => bj
)

)

[2] => Array
(
[1] => Array
(
[0] => 3
[id] => 1
[1] => c
[name] => c
[2] => 14
[age] => 14
[3] => nv
[sex] => nv
[4] => sh
[addr] => sh
)

[2] => Array
(
[0] => 6
[id] => 2
[1] => f
[name] => f
[2] => 14
[age] => 14
[3] => nv
[sex] => nv
[4] => sh
[addr] => sh
)

)

[3] => Array
(
[1] => Array
(
[0] => 4
[id] => 1
[1] => d
[name] => d
[2] => 14
[age] => 14
[3] => na
[sex] => na
[4] => tj
[addr] => tj
)

[2] => Array
(
[0] => 5
[id] => 2
[1] => e
[name] => e
[2] => 14
[age] => 14
[3] => na
[sex] => na
[4] => tj
[addr] => tj
)

)

)
wxcyz 2007-03-06
  • 打赏
  • 举报
回复
<?php
require_once("db_conn.php");
$sql = "SELECT distinct age,sex,addr from test";
$res = mysql_query($sql);
$is=1;
while ($rs = mysql_fetch_array($res)){
$sql_a = "select * from test where age='".$rs['age']."' and sex='".$rs['sex']."' and addr='".$rs['addr']."';";
$res_a = mysql_query($sql_a);
$id = 1;
while ($rs_a = mysql_fetch_array($res_a)){
$rs_a['id'] = $id;
$text[$id] = $rs_a;
$id++;
}
$text_a[$is] = $text;
$is++;
}
print_r($text_a);
?>
windbrick 2007-03-06
  • 打赏
  • 举报
回复
怎么遍历结果集呢?把相同的分成一个数组?
windbrick 2007-03-06
  • 打赏
  • 举报
回复
我试试,谢谢.
wxcyz 2007-03-06
  • 打赏
  • 举报
回复
我来模拟测试一下
you_kind 2007-03-06
  • 打赏
  • 举报
回复
lz是不是在php里做或是怎样?
先 select distinct (age,sex,add) from table;
然后遍历结果集,把每一条结果当成条件拼成sql语句,不就行了?
windbrick 2007-03-06
  • 打赏
  • 举报
回复
主要是我想根据分组来update,每组的编号重新分配.
name age sex add id
张三 15 男 北京 1
李四 15 男 北京 2
赵二 14 女 上海 3
无名 14 男 天津 4
王五 14 男 天津 5
钱六 14 女 上海 6


变更成:

name age sex add id
张三 15 男 北京 1
李四 15 男 北京 2
赵二 14 女 上海 1
无名 14 男 天津 1
王五 14 男 天津 2
钱六 14 女 上海 2

谢谢了.
windbrick 2007-03-06
  • 打赏
  • 举报
回复
是的,要全部的数据,数据内要分组.
几条语句也是可以的呀.谢谢了.
wxcyz 2007-03-06
  • 打赏
  • 举报
回复
这样不行,他要名字全部出来,只是把age,sex,add分别读到不同的数组。LZ是不是这样理解?
itian 2007-03-06
  • 打赏
  • 举报
回复
select * from tab group by age,sex,add
这样不行吗?
wxcyz 2007-03-06
  • 打赏
  • 举报
回复
排序还是一次读出来,如果是读出来,一条语句可能不行
windbrick 2007-03-06
  • 打赏
  • 举报
回复
我换成这样写了:

$db->query("SELECT age,sex,add FROM table");
//取全部
$rs = $db->fetchAll();
//结果放入数组
foreach ($rs as $key => $val){
$max++;
$sql_a = "SELECT id FROM table WHERE age='".$rs[$key][age]."' && sex='".$rs[$key][sex]."' && add='".$rs[$key][add]."' ;";
$res_a = $db->query($sql_a);
$id = 1;
while ($rs_a = $db->fetchRow($res_a)){
$id = 1;
echo "UPDATE table SET id = $id WHERE id = $rs_a[id] <br />";
$id++;
}
}

把echo换成SQL query就可以把id重新分配了.
谢谢了,结帐给分.

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧