2012-04-10 4 views
2

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?

+2

[Was haben Sie versucht, ?] (http://mattgemamm.com/2008/12/08/what-have-you-tried/) – j08691

+0

Datenbanken haben keine Spalten, Tabellen tun. – Basti

+0

@Will Bitte geben Sie nur ein bisschen mehr Informationen. Können die Zahlen negativ oder größer als 1 sein? – Sampson

Antwort

2

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.

+2

+1 Das ist einfach genial! :) – Basti

0

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; 
Verwandte Themen