如何简化此PHP/MySQL查询?

-2 php mysql

$query2  = "select * from dvdcollector where situatie='goedgekeurd'";
$query2  .= " and regisseur = '". escapeQuote($result->fields['regisseur']) . "'";
$query2  .= " or titel like '%". escapeQuote($result->fields['titel']) ."%'";
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs2']) . "'";  
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs3']) . "'";  
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs2']) . "'"; 
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs2 = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs2']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs3 = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs2']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs4 = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs2']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs5 = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs2']) . "'";
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs8']) . "'"; 
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs6 = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs2']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs7 = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs2']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs8 = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs2']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs9 = '". escapeQuote($result->fields['acteurs10']) . "'";

$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs2']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs3']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs4']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs5']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs6']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs7']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs8']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs9']) . "'";
$query2  .= " or acteurs10 = '". escapeQuote($result->fields['acteurs10']) . "'";
$query2  .= " order by RAND()"; 
Run Code Online (Sandbox Code Playgroud)

Man*_*zzi 6

编辑:现在有更多的桌子!

首先,在我看来,设计是有缺陷的.如果我理解正确,你使用字段列出演员的名字:

movieId | actor | actor 2 | actor 3 | actor 4
Run Code Online (Sandbox Code Playgroud)

由于这么多原因,这很糟糕.您可能想要开始阅读有关数据库中规范化的内容.

你最好把它分成三个表:

movies > movieId | movieTitle
actors > actorId | actorName
cast > movieId (fk to movies.movieId) | actorId (fk to actors.actorId)
Run Code Online (Sandbox Code Playgroud)

例:

movies > movieId:=123 | movieTitle:='Big Fish'
movies > movieId:=124 | movieTitle:='Matrix'
actors > actorId:=555 | actorName:='Ewan McGregor'
actors > actorID:=777 | actor:='Keanu Reeves'
actors > actorID:=888 | actor:='Lawrence Fishburne'
cast> actorId:=123 | movieId:=123
cast> actorId:=555 | movieId:=124
cast> actorId:=888 | movieId:=124
Run Code Online (Sandbox Code Playgroud)

然后你的查询看起来像:

SELECT * 
FROM movies JOIN cast ON cast.movieId=movies.movieID 
    JOIN cast JOIN actors ON actors.actorId = cast.actorID
WHERE actors.actorName = 'the_actor'
Run Code Online (Sandbox Code Playgroud)

Post scriptum:查询中的随机顺序也是一种反模式,请参阅Bill Karwin的SQL Antipatters.

  • 示例为+1.看起来OP也在使用actor名称...最好还有一个单独的actor表,名称和actor_id,并使xref表纯粹基于id (4认同)