Php 通过两个表中的一个sql显示输出

Php 通过两个表中的一个sql显示输出,php,mysql,Php,Mysql,家庭表 familynumber fistname lastname 10001 A B 10002 C D 10003 E F 10004 G H familynumber fistname姓氏 10001 A B 10002立方英尺 10003E-F 10004克小时 电话桌 familynumber phonenumber description 10001 111

家庭表

familynumber fistname lastname 10001 A B 10002 C D 10003 E F 10004 G H familynumber fistname姓氏 10001 A B 10002立方英尺 10003E-F 10004克小时 电话桌

familynumber phonenumber description 10001 111 mobile 10001 222 home 10001 333 text 10002 444 text 10003 555 work 10003 666 mobile 家庭号码电话号码说明 10001111流动电话 1000122home 10001333文本 10002444文本 10003555工作 10003666流动电话 我需要输出为

familynumber phonenumbers 10001 111, 222, 333 10002 444 10003 555, 666 家庭号码电话号码 10001 111, 222, 333 10002 444 10003 555, 666 我知道这可以通过以下代码实现

$families = mysql_query("select * from family")
while($family = mysql_fetch_assoc($families))
{
    extract($family);
    echo "<td>$familynumber</td>";
    echo "<td>";
    $phones = mysql_query("select * from phone where familynumber = '$familynumber'");
    while($phone = mysql_fetch_assoc($phones))
    {
        extract($phone);
        echo $phonenumber . ", ";
    }
    echo "</td>";

}
$families=mysql\u查询(“从族中选择*)
而($family=mysql\u fetch\u assoc($families))
{
摘录(家庭);
回显“$familynumber”;
回声“;
$phones=mysql_查询(“从电话中选择*,其中familynumber='$familynumber'”);
而($phone=mysql\u fetch\u assoc($phones))
{
摘录(电话);
echo$phonenumber.“,”;
}
回声“;
}
但是我需要在一个sql查询中得到这个输出

SELECT f.familynumber, GROUP_CONCAT(p.phonenumbers) AS numbers
FROM familytable f, phonetable p
WHERE f.familynumber = p.familynumber
GROUP BY familynumber

好吧,您可以始终使用左连接。这可能就是你要找的 比如:
从家庭左侧选择*加入家庭电话。家庭号码=电话。家庭号码

注意:这将为每个电话号码类型返回整行(因此,如果一个家庭有3个电话号码,它将返回家庭信息3次)

有关左连接的更多信息:

注意,还有右连接和内部连接。你应该学习,记住这些,它们是可有可无的。当你在这些方面做得更好时,请查阅优化联接。这里有一些很棒的文章,可以为您节省宝贵的时间。

使用函数


选择familynumber,将family中的电话号码作为fml内部连接电话号码作为fml上的ph。familynumber=ph.familynumber按ph.familynumber分组


我不确定,但这可能会帮助您或使您处于更好的位置

查看group_concat,我还需要家庭表字段
SELECT p.familynumber,
GROUP_CONCAT(DISTINCT p.phonenumber ORDER BY p.phonenumber SEPARATOR ",")
AS phonenumbers 
FROM phone p LEFT JOIN family f ON p.familynumber = f.familynumber
GROUP BY familynumber