我正在使用PHP和MySQL数据库

我有一个表,其中包含一列:演员

在表格的一行中,在“参与者”列中,可能列出了几个参与者,例如丹泽尔·华盛顿,查理·辛,马特·达蒙

下一行可能是:Matt Damon,Robert De Niro,Denzel Washington

它们始终以逗号分隔。

我有一个自动完成功能,在这里我要求用户选择一个演员。因此,当自动完成功能在列中查找时,它将返回整个列的值。

例如搜索Denzel的人将获得其自动完成结果:

丹泽尔·华盛顿,查理·辛,马特·达蒙
Matt Damon,Robert De Niro,Denzel华盛顿

据我所知,没有办法在这个级别上将其分开,所以我想我可能不得不从该表中删除参与者,成为一个单独的表,该表只为自动完成服务。

这是最好的方法吗?如果可以,可以做到吗?是否有一个简单的SQL查询,我可以单独使用以将actor移出,然后加载另一个表。这是不断更新的数据,因此需要每天运行,但是我假设如果新表中的actor列是唯一的,那么我就不会重复。

还是有更有效的方法?

注意:我需要指出,这是一个XML提要,并且我无法控制数据-是的,我知道它应该与一开始就分开,但是不幸的是,我只是在使用已有的东西

最佳答案

这可能不是一种很好的数据存储方式,因为一旦csv达到一定大小,它将变得非常缓慢且难以维护。

无论如何,关于您的问题,请告诉我是否有帮助:

<?php
$search = $_GET['search']; // assume it's 'de'
$result = array(); // this contains the result

$sql = 'SELECT `actors` from `tablename`;';
$run = mysql_query( $sql );

if ( $run && mysql_num_rows( $run ) ) {
   while ( ( $data = mysql_fetch_assoc( $run ) ) !== FALSE) {
      $num = explode( ',', $data[ 'actors' ] );

      for ($i=0; $i < $num; $i++) {
         if( stripos( $data[ $i ], $search ) !== false ) {
            $result[] = trim( $data[ $i ] );
         }
      }
   }
}

// here's the result you want
$result = array_values( array_unique( $result ) );
?>


这将起作用,但正如许多人所建议的那样,这不是一个很好的选择。

10-04 18:18