2010-03-12 7 views
2

J'ai deux requêtes MySQL:Trier requête mysql par requête filtrée

$sql = "SELECT * FROM content WHERE threadName LIKE '%$filter%' ORDER BY lastUpdated desc"; 

et

$sql = "SELECT * FROM content ORDER BY lastUpdated desc"; 

Le résultat final est d'avoir toutes les lignes renvoyées à partir d'une table particulière « contenu », mais ont ceux qui correspondre à la variable $ filter en haut. Y a-t-il une seule requête qui pourrait combiner ces deux ou devrais-je utiliser un JOIN?

............ toujours pas de chance. Voilà ce que j'ai actuellement:

$sql = "SELECT * FROM content WHERE threadName LIKE '%$filter%' ORDER BY lastUpdated desc UNION SELECT * FROM content WHERE threadName NOT LIKE '%$filter%' ORDER BY lastUpdated desc"; 

qui donne:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/andrew/public_html/PHP/threadDisplay.php on line 20 

bien que la première partie (avant l'UNION) fonctionne lorsqu'il est utilisé seul.

Répondre

1

Que diriez-vous d'utiliser un CASE STATEMENT.

Quelque chose comme

SELECT * 
FROM content 
ORDER BY CASE 
      WHEN threadName LIKE '%$filter%' THEN 0 
      ELSE 1 
     END ASC, 
     lastUpdated desc 
1
(SELECT * 
FROM content 
WHERE threadName LIKE '%$filter%') 
UNION 
(SELECT * 
FROM content 
WHERE threadName NOT LIKE '%$filter%') 
ORDER BY lastUpdated desc 

Modifier: MySQL a besoin de bracketing et exige de faire l'ordre après que le syndicat, désolé oublié.

+0

J'ai peur de la joie pour le moment, jetez un oeil à mon code mis à jour ci-dessus. – kalpaitch

+0

S'il vous plaît voir modifier. – AxelEckenberger