PHP Mysql左连接

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

我有两个表,其中的行如下:

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

我不知道该怎么做:

感谢您的帮助。

尝试以下方法:

$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>';
}