Sortierung nach Bedingung - Schwieriger Query (für mich)

ZodiacXP

Erfahrenes Mitglied
Habe ein Query mit mehreren Oder-Verknüpfungen im Where. Möchte nun, das meine erste Bedingung auch an erster Stelle im result steht.

Einfache Sortierung mit ASC oder DESC für Primärschlüssel führt nicht zum Ziel.
Nach Möglichkeit ohne JOIN.
Und keine Verwendung von IN () bei der Where-Klausel.
Hoffe ich hab nichts vergessen.

Beispiel :
Code:
SELECT `file`
FROM `template_group`
WHERE
  (
    `templateID` = (
          SELECT `templateID` FROM `template`
          WHERE `templateURI` = 'index' LIMIT 1)
    OR
    `templateID` = (
          SELECT `templateID` FROM `template`
          WHERE `templateURI` = 'menu' LIMIT 1)
  )
  AND `groupID` = 1

Hier soll zuerst das erscheinen bei dem template.templateURI = 'index', alle anderen können beliebig folgen.
 
Zuletzt bearbeitet:
Hehe. Mit dem Field hab ichs versucht.
War das erste wo ich wieder nachgeguckt hab... das war heut mittag.
Entweder bin ich zu Doof oder es klappt wirklich nicht.
Hab sogar ORDER BY FIELD(`template`.`templateURI`, 'index') gemacht.

Der Beispiel-Query mit IN() und/oder JOIN() ist von der Perfomance nicht so gut wie die Subqueries.

Werde es nochmal ein bisschen versuchen. Aber in einer halben Stunde gebe ich auf und geh ins Bett. Trotzdem danke für den Hinweis.
 
Zuletzt bearbeitet:
Zwei Tabellen:

template
mit Index: uri, ID

ID; uri
1; 'foo'
2; 'index'
3; 'fo'
4; 'menu'
5; 'fou'

template_group

ID; groupID; file
...
2; 1; 'index_guest'
...
4; 1; 'menu_guest'

Erster Query sortiert "garnicht". Ziel ist es das z.B. der Eintrag template.uri = 'menu' immer als erster erscheint.
 
Ziel ist es das z.B. der Eintrag template.uri = 'menu' immer als erster erscheint.

Das ist immer noch nicht genau. Was ist mit dem Rest? Egal? Dann solltest Du DESC als Sortierfolge benutzen, da FIELD 0 zurückgibt, wenn das erste Argument nicht in der Liste der restlichen Argumente enthalten ist. Oder Du bastelst das halt mit IF...

LG
 
Jo, der Rest war egal.
Wenn die Lösung da ist, poste ich sie hier.
Außer es läuft aus irgendeinem Grund auf zwei Querys hinaus.
 
Hi,

SQL:
SELECT `file`
FROM `template_group`
WHERE
  (
    `templateID` = (
          SELECT `templateID` FROM `template`
          WHERE `templateURI` = 'index' LIMIT 1)
    OR
    `templateID` = (
          SELECT `templateID` FROM `template`
          WHERE `templateURI` = 'menu' LIMIT 1)
  )
  AND `groupID` = 1
  ORDER BY FIELD(`templateURI`, 'menu') DESC

bewirkt, dass nach 'menu', <Rest unsortiert> sortiert wird.

LG
 
Zuletzt bearbeitet von einem Moderator:
Zurück