如何简化此PHP / MySQL查询?

时间:2011-02-11 08:55:02

标签: 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()"; 

5 个答案:

答案 0 :(得分:6)

编辑:现在有更多桌子!

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

movieId | actor | actor 2 | actor 3 | actor 4

由于这么多原因,这很糟糕。您可能想要开始阅读normalization in databases

你最好把它分成三个表:

movies > movieId | movieTitle
actors > actorId | actorName
cast > movieId (fk to movies.movieId) | actorId (fk to actors.actorId)

示例:

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

然后你的查询看起来像:

SELECT * 
FROM movies JOIN cast ON cast.movieId=movies.movieID 
    JOIN cast JOIN actors ON actors.actorId = cast.actorID
WHERE actors.actorName = 'the_actor'

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

答案 1 :(得分:2)

看起来您忘了规范化此表。 Acteur肯定是一个重复组。我建议你在整个情况恶化之前将其正常化。

如果您不想这样做,请使用where IN('')语句并在该语句中使用select。

答案 2 :(得分:2)

CRIKEY !!!

你需要3张桌子......

表1:DVD 表2:业余

表3:dvd_acteur

现在,如果您需要查询中的一条记录,GROUP_CONCAT将有所帮助......

SELECT dvd.*, GROUP_CONCAT(`acteur`.`Name` SEPARATOR ',')
FROM dvd
LEFT JOIN dvd_acteur ON dvd_acteur.dvdID = dvd.dvdID
LEFT JOIN acteur ON acteur.acteurID = dvd_acteur.acteurID
WHERE dvd.situatie = 'goedgekeurd'
GROUP BY dvd.dvdID

看看情况如何。

答案 3 :(得分:-3)

您需要研究使用循环:http://www.w3schools.com/php/php_looping.asp

一旦掌握了这一点,请学习一些mysql最佳实践:http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

您可能还想查看您的数据库设计并考虑为您添加某种属性Actors ...例如SELECT FROM actors WHERE acting_style ='method acting'

答案 4 :(得分:-3)

使用IN()

select * from dvdcollector where situatie='goedgekeurd'
...
and (acteurs in(acteurs1, acteurs2, ...) or
acteurs2 in(acteurs1, acteurs2, ...) or
acteurs3 in(acteurs1, acteurs2, ...)
)