2010-09-06 4 views
1

je la requête suivante:problème pour SQL (Mysql)

SELECT a.field_eventid_key_value, a.field_showdate_value, b.nid , c.nid AS CNID 
    FROM content_type_vorfuehrung AS a 
    LEFT JOIN content_type_movies as b ON a.field_eventid_key_value = b.field_eventid_value 
    LEFT JOIN content_type_sonderveranstaltung as c ON a.field_eventid_key_value = c.field_sonderveranstaltungid_value 
    WHERE /* something */ 
    GROUP BY a.field_eventid_key_value, a.field_showdate_value, 
    ORDER BY a.field_showdate_value ASC,a.field_showtime_value ASC 

(clause where supprimé car il est hors de propos à la question)

Cela tire des données de 3 tables différentes et le trie selon la champ "showdate" dans la première table. Ceci est utilisé dans une fonction PHP qui retourne un tableau avec les résultats. Maintenant, il y a une nouvelle exigence: La table "content_type_movies" dans cette requête a un champ censé être un booléen (en fait c'est un int avec une valeur de "0" ou "1"). Ce champ est supposé remplacer l'ordre chronologique - c'est-à-dire que les résultats où le champ est "vrai" (ou "1" respectivement) devraient apparaître au début du tableau des résultats (avec les entrées restantes ordonnées chronologiquement comme précédemment).

Est-ce possible avec une seule requête?

Nous vous remercions d'avance pour votre temps,

Eike

Répondre

1

Vous pouvez utiliser:

ORDER BY b.MyIntField DESC, 
    a.field_showdate_value, 
    a.field_showtime_value 

MyIntField est le domaine qui est soit 1 ou 0 que vous voulez trier d'abord.

1
ORDER BY a.content_type_movies DESC, /*then other fields*/ a.field_showdate_value ASC,a.field_showtime_value ASC 

= 1 d'abord, puis les autres.