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/>";