Hier ist meine MySQL-Abfrage mit dem Ergebnis zurückgibt, möchte ich für jeden Wert von ‚Funktion‘ ist das erste Ergebnis der ‚Priorität‘, erhalten und somit das Ergebnis unterGROUP BY-Funktion, die das erste Ergebnis
erhalten jedoch , eine Syntax vom Typ "SELECT-Funktion, FIRST (Priorität) ... GROUP BY-Funktion" existiert nicht, haben Sie eine Idee, wie Sie dies tun?
SELECT car.function, car.priority
FROM challenge_access_rule car
WHERE 10 = car.challenge_id AND
(car.rule in ('everybody', 'friends') or
car.user_id = 2
)
ORDER BY ABS(car.priority);
Dann, wenn Sie das Minimum der Absolutwert der Priorität möchten, dann können Sie:
SELECT
function,
priority
FROM challenge_access_rule
WHERE 10 = challenge_access_rule.challenge_id
AND (
rule = 'everybody'
OR (rule = 'friends' AND 1)
)
UNION
SELECT
function,
isRestriction AS priority
FROM challenge_access_user
WHERE 10 = challenge_access_user.challenge_id AND challenge_access_user.user_id = 2
ORDER BY ABS(priority)
-- RESULT --
emitInstance | 0
emitDeal | 0
emitDealInstance | 1
emitDeal | 100
emitDealInstance | -100
vote | -100
emitDeal | -200
view | -200
interact | -200
-- DESIRED RESULT --
emitInstance | 0
emitDeal | 0
emitDealInstance | 1
vote | -100
view | -200
interact | -200
Danke, Bastien
Wie wäre es 'MIN (ABS (Priorität))'? – shmosel
-200 tritt immer noch zweimal in der zweiten Ergebnisliste auf. Ist das beabsichtigt? Warum ist 100 nicht in dieser Liste? Außerdem: Der Begriff "erster" ist mehrdeutig, wenn Sie keine eindeutige Sortierreihenfolge angeben. Wie entscheiden Sie, welches zuerst bei gleicher Priorität ist? – trincot
Ich habe bereits versucht "MIN (ABS (Priorität))", es funktioniert, aber ich habe nicht das Zeichen meiner Priorität –