Php 与族层次结构/布局相关的MySQL查询
我用这种格式整理了一些数据Php 与族层次结构/布局相关的MySQL查询,php,mysql,Php,Mysql,我用这种格式整理了一些数据 SR | NAME | FATHER NAME | ADDRESS | GROUP 1 | SAM FISHER | MR. KINGSLEY | PARK VIEW | USER 2 | JOHN FISHER | MR. KINGSLEY | PARK VIEW | USER 3 | KADINAL | MR. BEN | PARK
SR | NAME | FATHER NAME | ADDRESS | GROUP
1 | SAM FISHER | MR. KINGSLEY | PARK VIEW | USER
2 | JOHN FISHER | MR. KINGSLEY | PARK VIEW | USER
3 | KADINAL | MR. BEN | PARK VIEW | USER
这里1和2是金斯利先生的孩子,他们有相同的地址和团体。
但第三个不是金斯利先生的孩子,但有相同的地址和团体
我需要这样的查询,这样我就可以得到这种数据的同级报告
输出应如下所示
兄弟姐妹报告
SR | NAME | FATHER NAME | ADDRESS | GROUP
1 | SAM FISHER | MR. KINGSLEY | PARK VIEW | USER
JOHN FISHER
-------------------------------------------------------------
2 | KADINAL | MR. BEN | PARK VIEW | USER
现在我正在使用mysql查询
SELECT id, fat_name, sec, address, class, mobile,
GROUP_CONCAT(DISTINCT stu_name order by class ASC SEPARATOR ', ' ) stu_name,
GROUP_CONCAT(DISTINCT class order by class ASC SEPARATOR '<br>' ) class,
GROUP_CONCAT(DISTINCT sec order by class ASC SEPARATOR '<br>' ) sec,
GROUP_CONCAT(DISTINCT address order by class ASC SEPARATOR '<br>' ) address,
GROUP_CONCAT(DISTINCT adm_no order by class ASC SEPARATOR '<br>' ) adm_no
FROM student
where class <> 'OUT' and session='".$session."'
GROUP BY fat_name
order by class DESC
选择id、fat\u name、sec、address、class、mobile、,
GROUP_CONCAT(按类ASC分隔符“,”的不同stu_名称顺序)stu_名称,
GROUP_CONCAT(按类ASC分隔符“
”区分的类顺序)类,
组_CONCAT(按类ASC分隔符“
”的不同秒顺序)秒,
GROUP_CONCAT(按类ASC分隔符“
”的不同地址顺序)地址,
组目录(按类别ASC分隔符“
”的不同管理号顺序)管理号
来自学生
其中类'OUT'和session='“$session.”
按fat_名称分组
按类别说明排序
PHP:
<代码> > P>如果“父亲姓名”相同的记录也具有相同的地址和组值,则应考虑重新设计表并将父名、地址和组放在单独的表中,并在另一个表中加上“异名”的“名称”。否则,您想要实现的目标将毫无意义。尝试(未测试):
echo”“;
$count=1;
$keep_track=array()//数组以跟踪已显示的父名称
而($row=mysql\u fetch\u数组($sql,mysql\u ASSOC))
{
摘录(行);
$stu_name=$row['stu_name'];
$fat_name=$row['fat_name'];
$address=$row['address'];
//在这里,我们检查父亲的名字是否已经显示出来,
//一开始它是错误的
如果(数组\键\存在($fat\名称,$keep\跟踪)){
//如果已经提到,请跳过所有字段并仅显示“stu_name”
回显“
.”$stu_name.“
”;
}
其他的
{
//如果尚未显示,则显示所有字段
回声“
.”$stu_name.“
.”$fat_name.“
.”$address.“
”;
//在数组中记录父名称,以便在下一个循环中
//它不再显示
$keep_track[]=$fat_name;
}
如果($count++%3==0)
{
回声“;
}
}
回声“
”;
不确定您是否可以通过查询完成此操作,但可以使用PHP函数。您是否知道@ICANHascheezburger您可以粘贴如何打印上述报告的代码?这似乎很好。你有什么问题?echo”“$计数=1;而($row=mysql\u-fetch\u数组($sql,mysql\u-ASSOC)){extract($row);$stu-name=$row['stu-name'];$fat-name=$row['fat-name'];$address=$row['address'];echo“
“$stu-name.”
“$address.”
;“如果($count++%3==0){echo”“,$echo”“,”,
,
echo”“,
代码>
<?php
echo "<table id='testTable'><tr>";
$count = 1;
while ($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{
extract($row);
$stu_name = $row['stu_name'];
$fat_name = $row['fat_name'];
$address = $row['address'];
echo "<td style='width:33%;'><br/>" . $stu_name . "<br/>" . $fat_name . "<br/>" . $address . "<br/><br/></td>";
if ($count++ % 3 == 0)
{
echo "</tr><tr>";
}
}
echo "</tr></table><br/><br/><br/>";
echo "<table id='testTable'><tr>";
$count = 1;
$keep_track = array(); //array to keep track of father names already displayed
while ($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{
extract($row);
$stu_name = $row['stu_name'];
$fat_name = $row['fat_name'];
$address = $row['address'];
//over here we check if the father name has been displayed already,
//initially it will be false
if(array_key_exists($fat_name,$keep_track)){
//if it has been mentioned, skip all fields and display only 'stu_name'
echo "<td style='width:33%;'><br/>" . $stu_name . "<br/><br/><br/><br/></td>";
}
else
{
//if it hasn't been displayed, show all fields
echo "<td style='width:33%;'><br/>" . $stu_name . "<br/>" . $fat_name . "<br/>" . $address . "<br/><br/></td>";
//record father name in array so that in next loop
//it is not displayed again
$keep_track[] = $fat_name;
}
if ($count++ % 3 == 0)
{
echo "</tr><tr>";
}
}
echo "</tr></table><br/><br/><br/>";