Bestimmte Werte einer Spalte gewichten
Phrasier
- datenbank
0 ChrisB0 Frank (no reg)0 Phrasier
Hallo,
ich habe ein riesiges Problem.
Ich schreibe gerade eine multilinguale Anwendung und stehe total auf dem Schlauch.
Folgende Tabelle ist gegeben:
id | culture | wert
-------------------
1 | de | 37
2 | en | 12
3 | en | 19
4 | jp | 11
5 | jp | 13
6 | de | 23
-------------------
Ausserdem ist eine PHP-Variable vorhanden, welche ich einfach mal $nat nenne.
Diese Variable enthält nun den Wert 'de'.
Ich muss nun die obige Tabelle ausgeben - unter brücksichtigung der eingestellten Sprache. Das heisst, die Ausgabe muss zuerst alle Werte liefern, welche 'culture = de' sind, und als zweite Bedingung muss nach absteigender id sortiert werden.
Also sollte die Ausgabe hinterher lauten:
id | culture | wert
-------------------
6 | de | 23
1 | de | 37
5 | jp | 13
4 | jp | 11
3 | en | 19
2 | en | 12
-------------------
Wenn $nat = 'jp' wäre, dann müsste ausgegeben werden:
id | culture | wert
-------------------
5 | jp | 13
4 | jp | 11
6 | de | 23
3 | en | 19
2 | en | 12
1 | de | 37
-------------------
Ist soetwas überhaupt möglich?
Ein ORDER BY funktioniert hier ja nicht mehr wirklich.
Das wäre super lieb, wenn mir jemand einen Ansatz oder eine Idee liefern könnte.
Gruß
Phrasier
Hi,
Das heisst, die Ausgabe muss zuerst alle Werte liefern, welche 'culture = de' sind, und als zweite Bedingung muss nach absteigender id sortiert werden.
Dann lasse dir mittels IF den Wert 1 oder 0 ermitteln, je nachdem ob culture = 'de' ist oder nicht.
Nutze diesen Wert als erstes Sortierkriterium, die id als zweites.
MfG ChrisB
Hallo,
ich habe ein riesiges Problem.
Na sowas aber auch.
Kurzum: Vergleiche Feld "culture" in einer Abfrage mit dem Wert deiner PHP Variablen und je nach übereinstimmung erzeugst du dafür einen Surrogatwert, z.b. 1 oder 99 oder -1, wenn keine Übereinstimmung, dann bleibts bei 0
Mal schanell in T-SQL (für Microsoft Sql Server) formuliert, @par1 ist dabei ein Platzhalter ... wie das in deiner Umgebung zu handhaben ist, hängt von deiner Datenbank ab. Ebenso ob du eine Unterabfrage brauchst. (Deswegen für diejenigen, die von wegen "nicht optimal" kommen, können sich ihren Kommentar dazu sonstwohin stecken.)
SELECT *
FROM (SELECT Id, Culture,
case when culture = @par then 1 else 0 end as SortierungsHilfe,
Wert
FROM deineTabelle) AS tabelleMitSortierung
ORDER BY tabelleMitSortierung.SortierungsHilfe DESC, tabelleMitSortierung.Id DESC
Das ergibt dann ein solches Zwischenresultat, wenn $nat = 'jp' ist
id | culture | wert | Sortierungshilfe
-------------------------------------------------
1 | de | 37 | 0
2 | en | 12 | 0
3 | en | 19 | 0
4 | jp | 11 | 1
5 | jp | 13 | 1
6 | de | 23 | 0
--------------------------------------------------
Ciao, Frank
Danke...das wars!
SELECT *
FROM (SELECT Id, Culture,
case when culture = @par then 1 else 0 end as SortierungsHilfe,
Wert
FROM deineTabelle) AS tabelleMitSortierung
ORDER BY tabelleMitSortierung.SortierungsHilfe DESC, tabelleMitSortierung.Id DESC