【问题标题】:Select unique text from an array从数组中选择唯一的文本
【发布时间】:2011-11-14 03:57:39
【问题描述】:

我在从数据库中选择唯一文本时遇到问题。

这是一个电影数据库,假设我在数据库中有两部电影。

第 1 部电影属于以下类别:剧情片、爱情片、战争片 第 2 部电影在类别中:剧情片、惊悚片

我需要的是返回一个数组,它将显示我:戏剧、浪漫、战争、惊悚。 我当前对 mysql 的查询如下:

$query = '从 imdb 中选择流派,其中演员喜欢 "%%'.$name.'%"';

在 while 循环中,我使用“foreach”,如下所示:

foreach(explode(', ', $TMPL['genres']) as $v)
                    $TMPL['genre'] .= '<option value="'.urlencode($v).'">'.($v).'</option>';

这将返回所有值,包括重复的值,例如:戏剧、浪漫、战争戏剧、惊悚

任何线索如何解决这个问题?

【问题讨论】:

    标签: php mysql arrays design-patterns


    【解决方案1】:
    $query = 'SELECT DISTINCT genres FROM imdb WHERE actors LIKE "%%'.$name.'%"';
    

    会做的

    【讨论】:

      【解决方案2】:

      使用DISTINCT

      $query = 'SELECT DISTINCT genres FROM imdb WHERE actors LIKE "%%'.$name.'%"';
      

      【讨论】:

        【解决方案3】:

        所以你有一个带有分隔的流派列表的列?

        遍历查询中的每一行并分解类型,将每种类型添加到主数组中,然后使用array_unique()

        如果我对您的理解正确,您将无法(轻松地)使用 MySQL,因为您没有正确规范您的数据库。

        【讨论】:

          【解决方案4】:

          只需在具有重复值的数组上使用 array_unique 函数!

          $unique_values = array_unique($TMPL['genre']);

          【讨论】:

          • $query = '从 imdb 中选择流派,其中演员喜欢 "%%'.$name.'%" order by char_length(genres) DESC'; $result = mysql_query($query); while($TMPL = mysql_fetch_assoc($result)) { $TMPL['genre'] = ''; foreach(explode(', ', $TMPL['genres']) as $v) $TMPL['genre'] .= ''; $gensearch .= $skin->make();这是完整的代码,但我不明白如何在这一个中使用 array_unique,顺便说一句,感谢您的建议,上面带有 select distinct 的 cmets 没有帮助,因为我不能在我的上使用 select distinct问题。
          • 首先您要选择流派,并且您的数组索引设置为首先修复流派。
          • 基本上看起来你在那里做的太多了。只需生成一个包含所有重复值的数组,然后在其上使用唯一数组,然后对该数组执行 for each。
          猜你喜欢
          • 2017-10-10
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 2013-08-30
          • 2020-08-30
          • 1970-01-01
          • 1970-01-01
          • 2012-03-27
          相关资源
          最近更新 更多