2016-03-28 28 views
0

Ich entwickle ein Online-Prüfungssystem und möchte Daten aus der Datenbank abrufen, wenn der Wert des Benutzers in dem vom Administrator festgelegten Bereich liegt.MySQL: Wie Bereich in mysql auswählen?

Der Bereich ist dynamisch und wird vom Administrator festgelegt.

Beispiel:

Tabellenfelder WERTE:

outcome_id | outcome_range 
    1  | 2,5 
    2  | 6,10 
    3  | 11,15 

USER:

Wenn der Benutzer 3 Punkte wird es die Datenreihe Ergebnis id 1 von der get Tabelle, weil die Punktzahl im Bereich von 2-5 liegt.

+1

, was Sie haben versucht, –

+0

Sind diese Bereiche kontinuierlich? (Angesichts der Kontext würde es sonst nicht viel Sinn machen.) – VolkerK

+1

Ich würde vorschlagen, Ergebnisbereich in 2 Felder Min_Outcome_Range und Max_outcome_range und dann überprüfen, ob User_Got zwischen Min und Max – yesitsme

Antwort

0

Sie können

Tabelle

outcome_id | min_outcome | max_outcome 
    1  | 2   | 5 
    2  | 6   | 10 
    3  | 11   | 15 
den Bereich trennen

Abfrage

SELECT * FROM table_name WHERE min_outcome <= 3 AND max_outcome >= 3 

erstellen Tabelle
CREATE TABLE IF NOT EXISTS `table_name` (
    `outcome_id` int(11) NOT NULL AUTO_INCREMENT, 
    `min_outcome` int(10) NOT NULL, 
    `max_outcome` int(10) NOT NULL, 
    PRIMARY KEY (`outcome_id`) 
) ; 

INSERT INTO `table_name` (`outcome_id`, `min_outcome`, `max_outcome`) VALUES 
(1, 2, 5), 
(2, 6, 10), 
(3, 11, 15); 
+1

danke Mann .. –

0

Der zweite Wert (Max-Punkte) könnte überflüssig sein, wenn
a) die Bereiche sind kontinuierlich und
b) Sie genau 1 wählen (oder 0) Ergebnis id

CREATE TABLE outcomes (
    outcome_id int, 
    outcome_min int, 
    unique index(outcome_min) 
) 

INSERT INTO outcomes (outcome_id,outcome_min) VALUES 
    (1,2), 
    (2,6), 
    (3,11) 

SELECT outcome_id FROM outcomes WHERE outcome_min>=3 ORDER BY outcome_min ASC LIMIT 1 
0

Sie nicht Ihre Tabellenstruktur ändern müssen.

Verwenden Sie einfach SUBSTRING_INDEX Mysql-Funktion, um die Werte als Min- und Max-Wert zu finden.

SELECT `outcome_id`, `outcome_range` FROM `test` HAVING SUBSTRING_INDEX(`outcome_range`, ',', 1) <= 3 AND SUBSTRING_INDEX(`outcome_range`, ',', -1) >= 3 

Diese hübsche Sache auch mit der WHERE-Klausel. Das gleiche Ergebnis kommt heraus.

SELECT `outcome_id`, `outcome_range` FROM `test` WHERE SUBSTRING_INDEX(`outcome_range`, ',', 1) <= 3 AND SUBSTRING_INDEX(`outcome_range`, ',', -1) >= 3 

Hier verwende ich 3 als statischen Wert. Sie können den dynamischen verwenden. Dies ist eine Benutzereingabe.

Ausgang:

outcome_id outcome_range 
1    2,5