Werte aus Tabelle die in einem Bereich liegen

Werte aus Tabelle die in einem Bereich liegen

am 21.01.2006 14:58:33 von Ralf Miller

Hallo Leute,

irgendwie bekomme ich es einfach nicht hin. Jetzt hoffe ich mal Ihr
seht es mir nach und könnt mir einen Tipp geben, wie man das per mySQL
lösen könnte.

Folgende Tabelle habe ich:

+----------+------------+-----------+----------+
| Name | Objekt | von | bis +
+----------+------------+-----------+ ---------+
| NA1 | OBJ2 | 01 | |
| NA2 | OBJ1 | 01 | 05 |
| NA3 | OBJ2 | 01 | |
| NA4 | OBJ3 | aa | zz |
| NA5 | OBJ3 | 01 | |
| NA6 | OBJ1 | 02 | |
| NA7 | OBJ1 | * | |
| NA8 | OBJ1 | 01 | |
+----------+------------+-----------+ ---------+

Jetzt würde ich gerne über eine mySQL Abfrage genau die Zeilen
ausgeben, die z.B. ein Bestimmtes objekt beinhalten und einen gewissen
Wert haben.
Folgende Beispiele:
Die Suche Objekt "OBJ1" und Wert "02" sollten somit die Zeilen NA2;
NA6; und NA7 liefern. (Stern steht als Joker)
Die Suche Objekt "OBJ3" und Wert "zz" sollten somit die Zeilen NA4.
Die Suche Objekt "OBJ2" und Wert "02" sollten somit keinen Wert liefern.

Ich weiß leider nicht wie ich in mySQL diese Spalten von bis einbauen
kann, so dass diese als Grenzen verwendet werden und alle Werte
dazwischen auch funktionieren.
Das blöde daran ist, dass bei den von bis Spalten sowohl numerische als
auch alphanumerische zeichen erscheinen können. Also aa - zz; oder
aaa-zzz. bzw. 01-09 usw.

Gibt es eine möglichkeit dies in mySQL vorzunehmen, dass hier die
richtigen Werte gezogen werden?

Tausend Dank für eure Hilfe.
Ralf

Re: Werte aus Tabelle die in einem Bereich liegen

am 21.01.2006 16:35:00 von jth01

Ralf schrieb:

das hängt ein wenig davon ab, wie die Reihenfolge dieser Kennungen denn
nun sein soll. Ist sie lexikographisch, gibt's kein Problem.

select Name from Objekt where von <= wert and wert <= bis;

Aber vielleicht liegt dein Problem ja gerade darin, dass es eben nicht
lexikographisch geordnet ist. Ich fürchte, du bist in MySQL dann darauf
angewiesen, andere Daten in der Tabelle abzulegen, als die, die du für
dein Problem eigentlich haben willst. Du musst dann halt immer umrechnen,
bevor du einen query an MySQL gibst.

Jens

Re: Werte aus Tabelle die in einem Bereich liegen

am 23.01.2006 19:42:52 von Harald Stowasser

Ralf Miller schrieb:

....snip

> Ich weiß leider nicht wie ich in mySQL diese Spalten von bis einbauen
> kann, so dass diese als Grenzen verwendet werden und alle Werte
> dazwischen auch funktionieren.
> Das blöde daran ist, dass bei den von bis Spalten sowohl numerische als
> auch alphanumerische zeichen erscheinen können. Also aa - zz; oder
> aaa-zzz. bzw. 01-09 usw.



SELECT name
FROM foo
WHERE $Wert BETWEEN
(IFNULL,IF(STRCMP(von,'*'),'000000',von),'000000')
AND
(IFNULL,IF(STRCMP(bis,'*'),'zzzzzz',bis),'zzzzzz')



könnte in etwas das machen was du willst. Weil:

SELECT '22' BETWEEN '00000' AND 'zzzzz';
1
SELECT 'aaaa' BETWEEN '00000' AND 'zzzzz';
1

Re: Werte aus Tabelle die in einem Bereich liegen

am 23.01.2006 20:01:21 von Harald Stowasser

....snip

> Ich weiß leider nicht wie ich in mySQL diese Spalten von bis einbauen
> kann, so dass diese als Grenzen verwendet werden und alle Werte
> dazwischen auch funktionieren. Das blöde daran ist, dass bei den von
> bis Spalten sowohl numerische als auch alphanumerische zeichen
> erscheinen können. Also aa - zz; oder aaa-zzz. bzw. 01-09 usw.



SELECT name
FROM foo
WHERE $Wert BETWEEN
IF(STRCMP(von,'*'),von,'000000')
AND
IFNULL(bis
,IF(STRCMP(von,'*'),von,'zzzzzz')
)
AND Objekt = $Objekt


könnte in etwas das machen was du willst. Weil:

SELECT '22' BETWEEN '00000' AND 'zzzzz';
1
SELECT 'aaaa' BETWEEN '00000' AND 'zzzzz';
1


Syntaxtest:

SELECT '222' BETWEEN
IF(STRCMP('*','*'),'*','000000')
AND
IFNULL(NULL
,IF(STRCMP('*','*'),'*','zzzzzz')
);
1