繁体   English   中英

PHP Mysql左联接

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

  • ID
  • 名称
  • p_id

链接

  • ID
  • 链接
  • p_id

在sub cat中,我具有电影类别,例如外语电影,国家电影,未分类的电影等。 在链接表中,我有具体的电影链接,具体取决于子类别。

唯一的事情是我不想重复标题(sub_cat.name)。 结果是:

没有类别 www.movi​​esite.com

没有类别 www.movi​​esite2.com

没有类别 www.movi​​esite3.com

外国电影 www.movi​​esite1.bla

外国电影 www.movi​​esite2.bla

我想成为

没有类别 www.movi​​esite.com

www.movi​​esite2.com

www.movi​​esite3.com

外国电影 www.movi​​esite1.bla

www.movi​​esite2.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.

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