letavino
Goto Top

Gibt es dafür einen MySQL Befehl?

Hallo, ich komme bei einem speziellen Problem leider nicht weiter und hoffe, ihr könnt mir helfen!

Ich schreibe eine Seite in php mit MySQL Datenbank.
Nun bräuchte ich einen Befehl, der etwa so aussehen müsste:

Wenn in Spalte "a" ein bestimmter Wert steht, guck was in Spalte "b" steht und gib alle Datenreihen aus, die in Spalte "b" den gleichen Wert wie das vorherige "b" haben.

Mit zwei sql Abfragen müsste ich es hinbekommen:

Select 'b' Where 'a' = wert
Select * Where b = erstes ergebnis

Aber da ich noch im lernen bin, würde es mich interessieren, ob man das ganze auch in einer Abfrage unterbringen kann.
(wahrscheinlich wieder ein kleiner Trick, der mir vorher nicht bekannt war ;) )

Lg, Florian

Content-Key: 154254

Url: https://administrator.de/contentid/154254

Printed on: April 25, 2024 at 21:04 o'clock

Member: Balu90
Balu90 Nov 03, 2010 at 10:17:58 (UTC)
Goto Top
SELECT * FROM DATENBANK WHERE DATENBANK.A = [WERT] AND DATENBANK.B = DATENBANK.A

Kann dir leider keine Garantie auf Richtigkeit gaben, weil ich mich in SQL nicht richtig auskenne. So würde ich es mit einer FoxPro Datenbank machen, die auch auf SQL Befehlen basiert.

lg

Balu
Member: em-pie
em-pie Nov 03, 2010 at 10:21:43 (UTC)
Goto Top
Moin,
in der Hoffnung, dass ich dich richtig verstanden habe:

Sinniger wäre doch
Select * from DB where a=Wert AND b=Wert

Er sollte dir jetzt alles ausspucken, was in Spalte a und b den selben Wert hat

gruß
meistro
Member: Letavino
Letavino Nov 03, 2010 at 10:24:21 (UTC)
Goto Top
Danke schonmal für die Antwort!

Aber, wenn ich "WHERE DATENBANK.A = [WERT]" schreibe,
kommen als Ergebnis ja nur solche Datenreihen, die diesen Wert in der Datenbank 'a' stehen haben., oder nicht?
Ich hätte aber auch gerne alle Datenreihen, bei denen der Wert b mit dieser Reihe übereinstimmt.

Lg
Member: Balu90
Balu90 Nov 03, 2010 at 10:27:27 (UTC)
Goto Top
Zitat von @Letavino:
Danke schonmal für die Antwort!

Aber, wenn ich "WHERE DATENBANK.A = [WERT]" schreibe,
kommen als Ergebnis ja nur solche Datenreihen, die diesen Wert in der Datenbank 'a' stehen haben., oder nicht?
Ich hätte aber auch gerne alle Datenreihen, bei denen der Wert b mit dieser Reihe übereinstimmt.

Lg

Das ist ein verknüpfter Ausdruck...

WHERE DATENBANK.A = [WERT] AND DATENBANK.B = DATENBANK.A

Nur wenn beide Bedingungen erfüllt sind wir der Datensatz selektiert.
Member: Letavino
Letavino Nov 03, 2010 at 10:42:38 (UTC)
Goto Top
Ich sehe, ich habe mich da doch recht undeutlich ausgedrückt.
Daher ein kleines Beispiel:

Datensatz 1:
a = 1
b = 2

Datensatz 2:
a = 4
b = 3

Datensatz 3:
a= 3
b= 2

Wenn mein Wert für 'a' nun 1 ist, findet man diesen ja in Datensatz 1.
Nun soll jeder Datensatz ausgegeben werden, bei dem der Wert für 'b' mit dem 'b' in Datensatz 1 übereinstimmt.
Also wird nicht nur Datensatz 1 ausgegeben, wie es bei "where a = wert" der fall wäre, sondern in diesem Fall würde Datensatz 1 UND Datensatz 3 ausgegeben.
(Kann ja auch sein, dass man sowas garnicht in eine Abfrage packen kann...)

Ich hoffe, das war etwas verstänlicher.

Lg
Member: Balu90
Balu90 Nov 03, 2010 at 10:57:56 (UTC)
Goto Top
Hmm ich verstehe dein Problem, aber da fällt mir leider nichts ein, wie man das lösen könnte ... :/
Member: gnbosse
gnbosse Nov 03, 2010 at 11:24:41 (UTC)
Goto Top
Am einfachsten geht es mit einer verschachtelten Abfrage:
SELECT * FROM Tabellenname where b = (SELECT b from Tabellenname where a='BESTIMMTERWERT')

|"""""Datenbank""""""" |
| |""Tabellenname"""| |
| | |"""""a""""|""""b"""""| | |
| | |----0-----|----1-----| | |
| | |----1-----|----2-----| | |
| | |----2-----|----3-----| | |
| | |----3-----|----1-----| | |


Ausgabe:

|a|b|
|0|1|
|3|1|


Getestet und läuft face-smile

MfG
Member: Letavino
Letavino Nov 03, 2010 at 12:04:19 (UTC)
Goto Top
ok, das funktioniert soweit schon ganz gut, vielen Dank!!
Das einzige Problem, das ich jetzt noch habe ist, dass es bisher nur zu funktionieren scheint, wenn 'a' nur einmal vorkommt.

also:

| Datenbank |
| | Tabellenname | |
| | | a | b | | |
| | | 0 | 1 | | |
| | | 1 | 2 | | |
| | | 2 | 3 | | |
| | | 3 | 1 | | |

| | | 0 | 2 | | |

Ausgabe bei a = 0:

|a|b|
|0|1|
|3|1|

|0|2|
|1|2|

Scheint noch nicht zu gehen.
Kann man das ganze dahingehend erweitern?
Oder müsste man sich da was ganz neues überlegen?

Lg
Member: gnbosse
gnbosse Nov 03, 2010 at 12:12:23 (UTC)
Goto Top
Damit ich das richtig verstehe,

du hast in der Tabelle jetzt die angenommenen Werte:
| a | b |
| 0 | 1 |
| 1 | 2 |
| 2 | 3 |
| 3 | 1 |
| 0 | 2 |

Der Eingabewert bleint bei '0' und du möchtest in dem Falle die Ausgabe:
| a | b |
| 0 | 1 |
| 3 | 1 |
| 0 | 2 | <- Oder hierzu dann auch alle Datensätze bei denen b=2 ist?

Oder liege ich mit der Annahme daneben?

MfG
Member: Letavino
Letavino Nov 03, 2010 at 12:18:12 (UTC)
Goto Top
Die Ausgabedaten sollten dann:

| a | b |
| 0 | 1 |
| 3 | 1 |
| 0 | 2 |
| 1 | 2 |

sein.

Also, wie deine vorgeschlagene Abfrage, nur dass alle 'a' mit dem wert 0 berücksichtigt werden sollen und nicht nur eins.
Ich hoffe, das ist einigermaßen verständlich.

Lg

Ps:
"Oder hierzu dann auch alle Datensätze bei denen b=2 ist?"

Genau so.
Member: gnbosse
gnbosse Nov 03, 2010 at 12:31:09 (UTC)
Goto Top
Dann sollten 3 hinzugefügte Buchstaben reichen um den Zweck zu erfüllen:
SELECT * FROM Tabellenname WHERE b=ANY(SELECT b FROM Tabellenname WHERE a='EINGABEWERT') ORDER BY b

mit dem ORDER BY sieht das dann genau so aus, wie du es möchtest, hoff ich :D
MfG
Member: Letavino
Letavino Nov 03, 2010 at 12:45:38 (UTC)
Goto Top
Klappt nun alles genauso, wie es soll.
Da hat doch doch wieder einmal was gelernt ^^

Vielen Herzlichen Dank! face-smile

Lg
Member: gnbosse
gnbosse Nov 03, 2010 at 12:52:05 (UTC)
Goto Top
Keine Ursache, freut mich das ich helfen konnte.
Weiterhin viel Erfolg mit deiner Seite!

MfG