DB Anfrage nach mehreren IDs

Mairhofer

Erfahrenes Mitglied
Schönen Guten Abend,

ich weiss der Betreff ist nicht wirklich 100%, aber ich kann es so kurz nicht beschreiben.

Ich hab folgende Situtation:
Ich habe 3 Tabellen, in der "Produkteteile" gespeichert sind. Diese Tabelle sind aufgebaut mit ID, Name, Beschreibung usw
Bsp:
Tabelle1 -> ID | Name | Beschreibung
Tabelle2 -> ID | Name | Beschreibung
Tabelle3 -> ID | Name | Beschreibung

Aus allen 3 Tabellen möchte ich nun ein Gesamtprodukt bauen.
Für dasGesamtprodukt möchte ich eine neue Tabelle nehmen, in der eine ID steht und jeweils eine Spalte, in der die ID's aus Tabelle1, Tabelle2 und Tabelle3 stehen.

Sprich diese Tabelle (nennen wir sie Tabelleprodukt) sieht zum Beispiel so aus:


ID | IDS_aus_tabelle1 | IDS_aus_tabelle1 | IDS_aus_tabelle1
---------------------------------------------------------------------------------------------------------
1 | 2--4--6--10--35 | 11--12--14--17 | 2--4--6--7--8--9

Nun wollte ich aus der Tabelle "tabelleprodukt" zum Beispiel die Spalte IDS_aus_tabelle1 auslesen und den String auseinander pflücken, sodass ich nur noch die einzelnen Ziffern habe (2,4,6,10,35).
Nun weiss ich, welche IDs(und damit die Produktdetails)aus Tabelle1 zum Gesamtprodukt gehören und ich möchte zum Beispiel die Beschreibung aus Tabelle1 zu diesen IDs auslesen.

Eine Möglichkeit ist natürlich, in diesem Beispiel, 5 SQL Abfragen zu machen, die dann so aussehen wie

SELECT beschreibung FROM tabelle1 WHERE id='2'
SELECT beschreibung FROM tabelle1 WHERE id='4'
SELECT beschreibung FROM tabelle1 WHERE id='6'
.
.
.
usw

Das ist natürlich ein wenig unprofessionell und ich wollte Fragen ob mir jemand eine Möglichkeit nennen kann, wie man diese Abfragen einfacher und kürzer machen kann.
In diesem Beispiel gehören nur 5 IDs aus Tabelle1 zum Gesamtprodukt, aber was ist wenn es 30-40 sind.

Ich hoffe ich habe es genau genug beschrieben. Ich würde mich über ne Antwort freuen.

MfG
Andreas
 
Code:
SELECT id, beschreibung
FROM tabelle_1
WHERE id=2 OR id=4 OR id=6 OR id=10 OR id=35;

Edit: Du musst dir natuerlich das Query dynmisch zusammensetzen.
D.h. den String anhand -- aufspitten und mit implode() das Query aufbauen.

HTH
 
Zuletzt bearbeitet:
Original geschrieben von snuu
Mal davon abgesehen, dass Dein Datenmodell keine Ähnlichkeit mit der 3. Normalform aufweist.
Vielleicht weiss er nicht, was die 3. Normalform eines relationalen Datenmodell ist? Haettest Du es dazu geschrieben, wuesst er jetzt bereits bescheid. *scnr

-> 3. Normalform
 
Zuletzt bearbeitet:
Ich wollte jetzt eigentlich keine Diskussion zu Datenbankmodellen auslösen.

Ich weiss nicht viel über Datenbankmodelle, das steht hier auch nicht zur Diskussion.

Ich habe es versucht mit einem anderen Aufbau der Datenbank, da jedoch diese Datenbank sowas von pervers dynamisch behandelt werden soll und ich nicht zwischendurch immer irgendwelche Spalten hinzufügen, ändern muss, habe ich mir diese Form ausgesucht.
Ein Gesamtprodukt kann ja mal aus
Tabelle_1: 10x
Tabelle_2: 23x
Tabelle_3: 55x

bestehen oder aus nur aus jeder Tabelle_1-3 nur 1.
Durch diese ID Methode habe ich keine grosse Redunanz in der DB.

Zu dem SQL Statement von stanleyB:
ich will ja nicht ne ODER Verknüpfung.
Ich lese die ID's mit explode aus dem String aus, nun möchte ich jede Beschreibung zu jeder ID aus Tabelle_1 haben.

Nochma nen Beispiel:
Tabelle_1
ID | NAME | Beschreibung
--------------------------------------
1 | Wert1 | Hallo
2 | Wert2 | Welt
3 | Wert3 | da
4 | Wert4 | draussen
5 | Wert5 | PUNKT

Nun in Gesamtprodukt hab ich stehen:
Code:
ID | IDS_aus_tabelle1 | IDS_aus_tabelle1 | IDS_aus_tabelle1 
---------------------------------------------------------------------------------------------------------
1   |      1--2--3--4--5      |         18--32--17       |                 4
2   |        12--43--51       |            17--42--14    |            12--34--56
3   |                2                |             14--52          |          12--13

Jetzt lese ich die 1. Zeile aus der Tab: Gesamtprodukt aus.
Davon nehme ich Spalte 1, also IDS_aus_tabelle1, und zieh mir die IDs raus.
Nun hab ich nen array (1,2,3,4,5) und möchte nun folgende SQL Abfrage in einem oder weniger Statements machen
$bla = mysql_query("SELECT beschreibung FROM tabelle1 WHERE id='1');
$bla2 = mysql_fetch_row($bla);
(Nun habe ich die Beschreibung von ID = 1 in tabelle1
Dann das ganze für ID = 2
$bla2 = mysql_query("SELECT beschreibung FROM tabelle1 WHERE id='2');
$bla22 = mysql_fetch_row($bla);
(Nun habe ich die Beschreibung von ID=2 in tabelle1)
USW
Bei 50 mal dauert das und MUSS besser gehen.

Ich bitte nochmal freundlich darum, mir zu helfen. Danke

Andreas
 
Zuletzt bearbeitet:
So damit sich keiner mehr Gedanken machen muss, ich hab mir hier was gebastelt mit 2 dimensionalen Arrays, womit ich bestens zufrieden bin.

Falls einer mein gefrickel und nicht 3. Normalfall Konventionsumgang mal sehen will soll ers sagen.
Das so zu posten ist mir fast zu peinlich, aber ich komm nun mit einer SQL Abfrage aus.

Mfg
Andreas
 
Original geschrieben von Mairhofer
Das ist natürlich ein wenig unprofessionell und ich wollte Fragen ob mir jemand eine Möglichkeit nennen kann, wie man diese Abfragen einfacher und kürzer machen kann.

Wenn du so professionell sein willst würde ich zuerst mal schauen das du die Normalformen hinkriegst. Ich würde eine Transformationstabelle machen, dann kannst du danach mit inner und outer joins deine Datenbank "professionell" handeln.

;)
 
Zurück