简体   繁体   English

从两个表中用一个 sql 显示 output

[英]Display output by one sql from two tables

family table家庭表

familynumber fistname lastname
10001        A        B
10002        C        D
10003        E        F
10004        G        H

phone table电话桌

familynumber phonenumber description
10001        111         mobile
10001        222         home
10001        333         text
10002        444         text
10003        555         work
10003        666         mobile

I need output as我需要 output 作为

familynumber phonenumbers
10001        111, 222, 333
10002        444
10003        555, 666

I know it can be done by folowing code我知道可以通过以下代码来完成

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

}

But I need this output in one sql query.但是我在一个 sql 查询中需要这个 output。

using GROUP_CONCAT function使用GROUP_CONCAT function

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
SELECT f.familynumber, GROUP_CONCAT(p.phonenumbers) AS numbers
FROM familytable f, phonetable p
WHERE f.familynumber = p.familynumber
GROUP BY familynumber

GROUP_CONCAT GROUP_CONCAT

Well, you can always use a left join.好吧,你总是可以使用左连接。 That is probably what you're looking for something like: SELECT * FROM family LEFT JOIN phone ON family.familynumber=phone.familynumber这可能是您正在寻找的类似: SELECT * FROM family LEFT JOIN phone ON family.familynumber=phone.familynumber

Note: This will return an entire row for each phone number type (so if a family has 3 phone numbers, it will return the families info 3 times).注意:这将为每个电话号码类型返回一整行(因此,如果一个家庭有 3 个电话号码,它将返回家庭信息 3 次)。

More on left joins: http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php更多关于左连接: http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

Note, there are also Right joins, and Inner joins.请注意,还有右连接和内连接。 You should learn, and memorize these, they are dispensable.你应该学习并记住这些,它们是可有可无的。 When you get better at them, look up optimizing joins.当您对它们变得更好时,请查找优化连接。 There are some great articles, that can save you precious time.有一些很棒的文章,可以节省你宝贵的时间。

SELECT familynumber, phonenumbers FROM family AS fml INNER JOIN phone AS ph ON fml.familynumber = ph.familynumber GROUP BY ph.familynumber SELECT familynumber,phonenumbers FROM family AS fml INNER JOIN phone AS ph ON fml.familynumber = ph.familynumber GROUP BY ph.familynumber

I am not sure but this may help you or put you in better position我不确定,但这可能会帮助你或让你更好 position

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM