schrecke
Goto Top

Abfrage aus mehreren Tabellen 2 Spalten Bezug auf eine Spalte

Hi,

ich will n paar DBs machen, hab aber schon in den Grundlagen Probleme.

Und zwar eine Tabelle "DVDs" (id, title, genre_1_id, genre_2_id) und eine Tabelle "Genres" (id, genre_name).
Nun will ich ne Abfrage machen, das es mir den Titel der DVD aus Tabelle_DVDs anzeigt und dazu 2 Spalten wo das 1. und das 2. Genre drin steht.

Wie mach ich das am Besten?

thx euch

Content-Key: 49764

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: PCDConny
PCDConny Jan 24, 2007 at 22:33:39 (UTC)
Goto Top
Naja, das erste Problem wird wohl sein das mit deinen Infos recht wenig anzufangen ist ;)

Welche Datenbank (MySQL, M$SQL, Oracle .......) ?
Welche Programmiersprache (PHP, JAVA, ASP, .NET ......) ?

Vorher könnte man nur die Glaskugel befragen, aber bei dem Wetter schauts da auch ganz trüb aus ;)

Moin moin, Conny
Member: Boy1980HH
Boy1980HH Jan 24, 2007 at 23:00:12 (UTC)
Goto Top
Sofern dein Problem darin liegt, überhaupt einen entsprechenden SQL zu formulieren könnte dir schon geholfen werden (unabhängig von den Punkten die PCDConny genannt hat).

Das was du da gerade nennt man Join, bei deinem Problem würde ich einen "Left Outer Join" verwenden

SELECT * FROM DVDs LEFT OUTER JOIN Genres ON (DVDs.genre_1_id = Genres.id OR DVDs.genre_2_id = Genres.id);
Member: djsammy1
djsammy1 Jan 25, 2007 at 00:19:53 (UTC)
Goto Top
-hallo,
ich weiss das ich bei euch hier falsch bin aber ich brauche umbedingt hilfe und weiss nicht an wen ich mich wenden sollte...
brauche umbedingt irgendein programm was alle 10 sekunden áuf dem internet explorer´eine bestimmte seit aktualisiert....
Hillllffffffeeeee

[Edit Biber]
ich weiss das ich bei euch hier falsch bin aber ich...
..aber ich kann ganz gut damit leben?
habe keine ahnung von computern....sorry
Nein, das ist kein Computerproblem... das ist viel grundsätzlicher.
Wenn ich nochmal über so ein Posting stolpere, lass ich es Dich aufessen.
[/Edit]
Member: PCDConny
PCDConny Jan 25, 2007 at 00:28:47 (UTC)
Goto Top
Und was hat das mit der Datenbankabfrage zu tun ??

Nimm den Firefox mit der Extension => Reload-Every, damit gehts ;)
Member: Maik87
Maik87 Jan 25, 2007 at 07:52:01 (UTC)
Goto Top
Hör bitte auf, alle Threats damit voll zu spammen!!
Member: Maik87
Maik87 Jan 25, 2007 at 07:52:52 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:53:13 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:53:34 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:53:55 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:54:15 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:54:36 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:54:56 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:55:17 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:55:37 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:55:58 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:56:19 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:56:40 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:57:00 (UTC)
Goto Top
Ich schätze du arbeitest als Anfänger mit Access und dann mit dem Drag and Drop, ne?
Member: Maik87
Maik87 Jan 25, 2007 at 07:57:21 (UTC)
Goto Top
Ich schätze du arbeitest als Anfänger mit Access und dann mit dem Drag and Drop, ne?
Member: Maik87
Maik87 Jan 25, 2007 at 07:57:42 (UTC)
Goto Top
--
Member: Maik87
Maik87 Jan 25, 2007 at 07:58:03 (UTC)
Goto Top
Ich schätze du arbeitest als Anfänger mit Access und dann mit dem Drag and Drop, ne?
Member: schrecke
schrecke Jan 25, 2007 at 09:13:49 (UTC)
Goto Top
OT

:D reicht wenn du mir das einmal schreibst :D

falls der mal ne Seite nicht neu läd nach dem abschicken des Posts, lieber erstma nachguggen, ob der nicht doch schon da ist. sowas wie dir ist mir auch schon mal passiert.

OT END

also danke erstmal für eure antworten. Als BD nehm ich MySQL und die Abfrage hatte ich bis jetzt erstmal nur im SQL-Modul von PHPmyAdmin gemacht. Es soll aber später alle mit PHP programmiert werden.

Das mit dem lef outer join werd ich mal versuchen und dann mal guggen ob ich das in php gebastelt bekomme ...
Member: Maik87
Maik87 Jan 25, 2007 at 09:53:30 (UTC)
Goto Top
o.O *oh schreck*
Was ist denn da passiert? Also nen Spamfilter könnte ja im Forum nicht schaden *fg*

OK, aber SQL liegt noch nicht in meinem Könnensbereich, sry.
Member: schrecke
schrecke Jan 25, 2007 at 09:59:02 (UTC)
Goto Top
also hab den code jetzt in pypmyadmin versucht ... klappt ohne Probleme, thx euch.

den php code dafür kann ja phpmyadmin generieren, jetzt muss ich mir nur noch das mit tabellen zurecht bauen, ma guggen ob ich das schaffe.

Frage noch: wenn in einer Zelle nun NULL drin steht gibt das phpmyadmin mit aus. Wird das das php script auch mit ausgeben und wenn ja, kann man das unterbinden? Das das einfach leer bleibt?
Member: Biber
Biber Jan 25, 2007 at 10:16:19 (UTC)
Goto Top
Na ja, nichts gegen LEFT JOINs,
aber in diesem Fall scheint mir ein UNION zielführender...
Select DVDs.id, Dvds.title, "1" as Genre_id, Genres.genre_name  from DVDs, Genres   
     where DVDs.id = genre_1_id 
union     
Select DVDs.id, Dvds.title, "2" as Genre_id, Genres.genre_name  from DVDs, Genres   
     where DVDs.id = genre_2_id 

HTH
Biber
Member: schrecke
schrecke Jan 25, 2007 at 17:40:22 (UTC)
Goto Top
warum?
Member: Biber
Biber Jan 25, 2007 at 18:33:45 (UTC)
Goto Top
Weil Du damit nur Sätze bekommst, in denen weder DVDs.id's noch die genre_xx_id's NULL sind.
Und weil ich einen "LEFT OUTER JOIN ... ON (..... OR ....)" nicht für performant halte.
Zumindest in der Theorie... klappt es nicht?

Gruß
Biber
Member: Boy1980HH
Boy1980HH Jan 25, 2007 at 21:37:42 (UTC)
Goto Top
Prinzipiell würde ich auch zu einem Union tendieren, aber dabei (wie du schon sagtest) werden alle Sätze rausgefilter wo das entsprechende ID Feld nicht gefüllt ist. Was damit natürlich auch dazu führt, dass bestimmte DVD's einfach nicht mehr gefunden werden.

Wenn das Ergebniss eher den Charakter eines SUchergebniss trägt, dann natürlich ganz klar den Union. Wenn aber das Ergebnis eine Übersicht (innerhalb eines Adminbereichs z.B.) genutzt werden sollte, den doch lieber den Outer Join da man dann auch die unvollständig/ fehlerhaft gepflegten Datensätze angezeigt bekommt.

Ein riesen Unterschied von der Performanceunterschied, sofern man davon bei MySQL überhaupt von Performace sprechen kann (vor allem wenn diese bei einem Webhostingserver liegen),sollte es eigentlich nicht geben. Zumindestens meine Test in diesem Bereich (gefühlte Ergebnisse face-smile ) bringen zumindest keine riesigen Unterschiede hervor....

Gruss, Maik
Member: Biber
Biber Jan 26, 2007 at 08:13:08 (UTC)
Goto Top
@Boy1980HH

FULL ACK.
Es kommt natürlich darauf an, was eigentlich das Ziel der Abfrage sein soll.
Wenn eine "Liste aller DVDs" das Ziel ist ---> klar, dann LEFT OUTER JOIN.
Egal, ob ein "Genre" eingegeben ist oder nicht.

Wenn das Ziel eine nach Genre sortierte Liste/Auswertung ist, dann würde in der Regel nicht gewollt/erwartet werden, dass diese Liste mit Datensätzen mit einem <NULL>-Genre beginnt. Dann also UNION.

Gruß
Biber