[英]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
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.