开发者

How can I simplify this PHP/MySQL query?

$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  .= "开发者_Python百科 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()"; 


EDIT: now with more tables!

First of all it seems to me that the design is flawed. If I understand right you used the fields to list the actors' names:

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

This is bad for so many reasons. You may want to start reading about normalization in databases.

You'd better split this into three tables:

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

Example:

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

Then your query would look something like:

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: random order in queries is a bit of an anti-pattern as well, see SQL Antipatters by Bill Karwin.


It looks like you forgot to normalize a this table. Acteur is definately a repeating group. I suggest you normalize this now before the headage even gets worse.

If you don't want to do this, use where IN('') statements and use a select in that statement.


CRIKEY!!!

You need 3 tables...

table 1: dvd table 2: acteur

table 3: dvd_acteur

NOW if you need one record from your query GROUP_CONCAT will help...

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

see how that goes.


You need to look into using loops: http://www.w3schools.com/php/php_looping.asp .

Once you've got the hang of that, learn some mysql best practises: http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

You may also want to look at your database design and consider adding some kind of attribute to you Actors... For example SELECT FROM actors WHERE acting_style = 'method acting'


using IN()

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜