Ich habe eine MySQL-Tabelle mit 8 Spalten, jede ist INT(1) default 0
.Wie testen, wenn nur 1 von 8 Feldern gleich ist 1
Wie kann ich prüfen, ob nur eines der 8 Felder gleich 1 ist?
Ich habe eine MySQL-Tabelle mit 8 Spalten, jede ist INT(1) default 0
.Wie testen, wenn nur 1 von 8 Feldern gleich ist 1
Wie kann ich prüfen, ob nur eines der 8 Felder gleich 1 ist?
Try this:
where 1 = (field1 = 1) + (field2 = 1) + ...
Diese auf der Basis arbeitet, die jede Bedingung in MySQL ein in 1
oder 0
gedreht wird. Wenn die Addition aller Bedingungen 1
ist, bedeutet das, dass nur eins 1
(oder true
) ist.
+1 Das ist einfach genial! :) – Basti
Dies funktionieren würde:
SELECT field1 + field2 + field3 + field4 + field5 + field6 + field7 + field8 = 1
AS ONLY_ONE
Welche zurück 1
(TRUE), wenn die Summe gleich 1 ist, und 0 (FALSCH), wenn es größer als 1 ist (mehr als ein Satz) oder weniger als 1 (keine einstellen).
Wenn Sie nicht über die Tabelle/db im Strict-Modus haben (so dass andere Werte als 0 und 1 sind möglich) Sie tun können:
SELECT (field1 > 0) + (field2 > 0) + (field3 > 0) ... = 1 AS ONLY_ONE
weil der Ausdruck wahr sein wird (1) und also wird als Wert von 1
hinzugefügt, wenn es 1 oder größer ist (ist gesetzt).
Wenn kein Standardsatz ist, dann könnte man weiter die Abfrage verfeinern:
SELECT COALESCE(field1 > 0, 0) + COALESCE(field2 > 0, 0) + COALESCE(field3 > 0, 0) ...
= 1 AS ONLY_ONE
So ist die beste Art und Weise Ihre Basen decken würde:
SELECT
COALESCE(field1 > 0, 0) +
COALESCE(field2 > 0, 0) +
COALESCE(field3 > 0, 0) +
COALESCE(field4 > 0, 0) +
COALESCE(field5 > 0, 0) +
COALESCE(field6 > 0, 0) +
COALESCE(field7 > 0, 0) +
COALESCE(field8 > 0, 0) +
= 1 AS ONLY_ONE
FROM my_table;
[Was haben Sie versucht, ?] (http://mattgemamm.com/2008/12/08/what-have-you-tried/) – j08691
Datenbanken haben keine Spalten, Tabellen tun. – Basti
@Will Bitte geben Sie nur ein bisschen mehr Informationen. Können die Zahlen negativ oder größer als 1 sein? – Sampson