【问题标题】:mysql results sort by arraymysql结果按数组排序
【发布时间】:2012-11-21 19:38:46
【问题描述】:

我想我不明白“排序”是如何工作的,所以请不要评判我。我真的整天都在搜索。

我有一个带有演员列的电影表。一个名为“演员”的列。演员是由空格“”分隔的链接。链接的顺序很重要。

我将链接分解成一个数组,看起来像 [0]-> link0, [1]->link1, ...

我有演员表,每个演员也有它的电影链接。我不想进行 20 次不同的 sql 搜索,所以我用我想要的所有链接创建了一个变量,就像这样(WHERE actor_link = link1 OR actor_link = link2 OR ..)

问题是这样的。搜索可能会首先找到link7,所以我的排序已经消失了。我能做些什么来保持电影表中的顺序。我想按电影中的受欢迎程度来显示演员,而不是我的数据库的顺序。

你能不能给我另一种方法来搜索演员而不进行'x' sql 搜索并且仍然保持顺序?

$actors[] = explode(" ", $row['actors_link']); 
$x=0;
$actors2 = '';
while ($actors[0][$x]) {
  $actors2 = $actors2 . "`link_imdb_actor` = " . "'".$actors[0][$x]."' OR ";
  $x++;
}
$actors2 = substr($actors2, 0, -3);

$sql = "SELECT * FROM `actors` WHERE $actors2";
$sql_result = mysql_query($sql) or die(" ");
while ($row3 = mysql_fetch_array($sql_result)) {
  echo $row3['link_imdb_actor'];
}

所以,电影特兰西瓦尼亚酒店有亚当·桑德勒、安迪·萨姆伯格和赛琳娜·戈麦斯。我的搜索显示了 Selena Gomez、Andy Samberg、Adam Sandler,因为这是我数据库中的订单。如何按演员数组的顺序对 sql 结果进行排序?谢谢!

【问题讨论】:

  • 你得给我们一些代码来看看,这很混乱
  • 您的数据库设置错误。如果您希望能够查询事物,则不应在列中放置多个项目。
  • Arjan,如果您有 300.000 个电影片名和 500.000 个演员,您想象一下当 1000 个用户查询数据库时您的服务器将如何工作?
  • SQL 数据库中结果集的顺序在形式上是不可预测的,除非您的查询包含适当的ORDER BY 命令。您需要某种类型的列来指示参与者优先级。
  • @acerluc:当表有适当的索引并且您使用耦合表来链接演员和电影时,数据库应该相对容易,您将能够检索单个电影的所有演员或单个演员的所有电影在一个简单的查询中。您的空格分隔字符串解决方案需要两个查询和更复杂的 php 代码。您还需要复制数据,因为您需要存储每部电影的演员列表,以及每个演员的电影列表。

标签: php mysql sorting


【解决方案1】:

为了扩展 Arjan 的评论,如果您希望能够实际使用参与者数据(例如使用它进行搜索),我建议您至少再添加两个表。一个称为actors,字段为actorID、firstName 和lastName。另一个表将是具有 castID、actorID、movieID 和 castOrder 字段的演员表。

然后,每个 castID 将一个演员链接到一部电影 - 这样可以轻松搜索特定演员参演的每部电影或特定电影中的每个演员。

castingOrder 字段可用于维护您想要的顺序。

【讨论】:

  • actors 表似乎已经存在,所以只需要 casts 表。或者链接actor_id和movie_id的其他表。
【解决方案2】:

我需要您现有的代码才能真正了解正在发生的事情。

我将在您的查询中提出一项建议。而不是说 WHERE actor_link = a OR actor_link = b OR actor_link = c 这样做:

WHERE actor_link IN (link1, link2, link3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2016-03-02
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    相关资源
    最近更新 更多