PHP Mysql左连接
我有两个表,其中的行如下: sub_猫 身份证件 名称 p_id 链接 身份证件 链接 p_id 在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 我不知道该怎么做: 感谢您的帮助。尝试以下方法:PHP Mysql左连接,php,mysql,left-join,Php,Mysql,Left Join,我有两个表,其中的行如下: sub_猫 身份证件 名称 p_id 链接 身份证件 链接 p_id 在sub-cat中,我有电影类别,如外语电影、国家电影、未分类电影等等。在链接表中,我有具体的电影链接,这取决于子类别 唯一的问题是,我不想使用不明确的标题sub_cat.name。 结果是: 无类别www.moviesite.com 无类别www.moviesite2.com 无类别www.moviesite3.com 外国电影www.moviesite1.bla 外国电影www.moviesit
$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>';
}
要完成这项工作,您有两种解决方案: 第一个解决方案是在显示数据之前对其进行处理,以便按类别对所有电影进行分组 例如,您可以执行以下操作:
$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中的所有其他字段上应用agregate函数
在性能方面,最好的解决方案是SQL解决方案,但使用PHP可以为演示提供更大的灵活性。您的查询已经很好了。您应该在应用程序级别执行此操作。特别是在这一部分:虽然$r=mysql_fetch_assoc$q{…}您不知道数据是否来自数据库,但顺序是否正确。所有具有相同类别的电影不一定按sub_cat.name ASC进行分组顺序-所有链接都将按正确顺序返回。事实上,由于顺序正确。跳过我的评论;但是,由于它依赖于数据的顺序,所以它的健壮性较差。我认为,在这段代码中,为了获得更健壮的less,我们需要使用category_id,而不是category name:$moviesByCategory[$r['sub_cat.id']]][=$r['links'];因为具有不同ID但名称相同的类别可能是不同的实体:我同意这一点,尽管在本例中,catgory的字母顺序不同。我提出了第一个解决方案,并更改了一些我需要的东西,做得很好,只是做了我想做的。再次感谢
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>';
}