[英]PHP Mysql Left Join
<?php
$q = mysql_query("SELECT sub_cat.*, links.*
FROM links
LEFT JOIN sub_cat
ON links.p_id = sub_cat.id
WHERE sub_cat.p_id = '$id'
ORDER BY name ASC") or die (mysql_error());
while ($r = mysql_fetch_assoc($q))
{
$links_name = $r['name'];
$link_h3 = $links_name != '' ? '<h3>' . $links_name . '</h3>' : '';
//print $link_h3;
print '<pre>';
print_r ($r);
}
?>
我有两个表,像这样的行:
在sub cat中,我具有电影类别,例如外语电影,国家电影,未分类的电影等。 在链接表中,我有具体的电影链接,具体取决于子类别。
唯一的事情是我不想重复标题(sub_cat.name)。 结果是:
没有类别 www.moviesite.com
没有类别 www.moviesite2.com
没有类别 www.moviesite3.com
外国电影 www.moviesite1.bla
外国电影 www.moviesite2.bla
我想成为
没有类别 www.moviesite.com
www.moviesite2.com
www.moviesite3.com
外国电影 www.moviesite1.bla
www.moviesite2.bla
而且不知道如何做到这一点:(
任何帮助表示赞赏。
为此,您有两种解决方案:
第一种解决方案是在显示数据之前对其进行处理,以便按类别对所有电影进行分组。
您可以例如执行以下操作:
$moviesByCategory = array();
while ($r = mysql_fetch_assoc($q))
{
// Create the new sub array for the new category if necessary
if (!isset($moviesByCategory[$r['name']]))
$moviesByCategory[$r['name']] = array();
// Add the movie in the category
$moviesByCategory[$r['name']][] = $r['links'];
}
然后,您现在可以像
foreach($moviesByCategory as $category => $movies)
{
// Print the category name
echo '<h1>' . $category . '</h1>';
// Print all movies of the category
foreach($movies as $movie)
echo '<h3>' . $movie . '</h3>';
}
第二种解决方案是修改SQL查询以将所有具有相同类别的电影直接分组。 您只需要在sub_cat.id
上使用GROUP BY
子句,然后将聚合函数应用于select中的所有其他字段。
对于性能方面,最好的解决方案是SQL解决方案,但是使用PHP进行操作将为您提供更大的灵活性。
尝试类似:
$lastSubcatName = "";
while ($r = mysql_fetch_assoc($q))
{
$links_name = $r['name'];
if($lastSubcatName != $links_name)
{
echo "<h1>".$links_name."</h1>";
$lastSubcatName = $links_name;
}
echo '<h3>' . $r['links'] . '</h3>';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.