Antworten auf deine Fragen:
Neues Thema erstellen

MySQL – Problem bei Abfrage

I

ILB_100

Guest

Hallo Leute

Ich arbeite gerade an einer Datenbank und brauch dringen Hilfe bei einer meiner Abfragen! Ich habe drei Tabellen:

- Artist
- Oscar
- Kategorie

Sie sind über die Foreign-Keys ArtistID und KategorieID in der Tabelle Oscar miteinander verbunden. Meine Abfrage soll nun alle Artists auflisten, die den Oscar in ZWEI Kategorien (Bester Hauptdarsteller / Bester Nebendarsteller) gewonnen haben.

Bei einer Kategorie komme ich mit, auch konnte ich ALLE Gewinner der beiden Kategorien abfragen, das sah dann so aus:

PHP:
SELECT DISTINCT a.`Name` FROM `Artist` a, `Oscar` o
 WHERE (o.`KatID` =
  (SELECT `KatID` FROM `Kategorie` WHERE `Bezeichnung` = 'Bester Hauptdarsteller')
  AND o.`ArtID` = a.`ArtID`)
 OR (o.`KatID` =
  (SELECT `KatID` FROM `Kategorie` WHERE `Bezeichnung` = 'Bester Nebendarsteller')
 AND o.`ArtID` = a.`ArtID`)

Wie kann ich nun nur die Artists abfragen, welche in beiden Kategorien gewonnen haben und nicht bloss in einer?

Vielen Dank schon mal für eure Hilfe!!
 

MarcAndre

Noch nicht viel geschrieben

AW: MySQL – Problem bei Abfrage

Hallo ILB_100,

versuch mal die 2 unter Abfragen mit einem AND zu verknüpfen.

Ich hoffe das ich Dich richtig verstanden habe.
Gruss
Marcus
 
I

ILB_100

Guest

AW: MySQL – Problem bei Abfrage

Hallo Marcus

Danke für die Antwort. Das hab ich versucht, anstelle des OR einfach ein AND. Dann erhalte ich aber gar keine Ergebnisse… Ein Fehler in den Daten ist es auch nicht, das habe ich auch kontrolliert, es gäbe schon Artists, die zwei Mal vorkommen.
 

fakerer

Aktives Mitglied

AW: MySQL – Problem bei Abfrage

hi,
das mit and geht so nicht weil die bedingung immer nur einmal vorkommen kann.
wenn ich deine tabellenstuktur richtig verstanden habe sollte es zb mit
PHP:
SELECT
    artist.`name`
FROM
    oscar
LEFT JOIN artist ON artist.artID = oscar.artID
LEFT JOIN kategorie ON kategorie.katid = oscar.katID
WHERE
    kategorie.bezeichnung = 'Bester Hauptdarsteller'
OR kategorie.bezeichnung = 'Bester Nebendarsteller'
GROUP BY
    artist.`name`
HAVING
    COUNT(oscar.katID)= 2
gehen.
 

rafoldi

Aktives Mitglied

AW: MySQL – Problem bei Abfrage

Den Having kann man auch weg lassen und mittels over partition die Anzahl der Datensätze ermitteln. Vorteil die Anzahl der Sätze wird wie ein Feld behandelt, ohne eine weitere DB Abfrage sind auch Abfragen nach dreimaligen Gewinnern möglich.
 

fakerer

Aktives Mitglied

AW: MySQL – Problem bei Abfrage

guten morgen,
@rafoldi ich kenne over partition nicht könntest du dazu vielleicht ein beispiel geben? Habe eben kurz gegoogelt und eigentlich nur partition by gefunden was aber eher irgendwie schon die tabellen beim erstellen verknüpft (zumindest hab ich es jetzt so auf die schnelle rausgelesen :).
Wenn ich die anzahl der leute gewinne pro person haben wollen würde würde ich das so machen.
PHP:
SELECT
DISTINCT artist.`name`, 
(select count(*) from oscar where oscar.artID = artist.artID and (oscar.katid = 1 or oscar.katid = 2)) as oscars
FROM
oscar
LEFT JOIN artist ON oscar.artID = artist.artID
having oscars = 2
allerdings komm ich da wieder nicht um das having rum und ein subselect. Bin immer offen für vorschläge :) denn schliessliche soll man hier ja was lernen, aber im moment wüste ich mix andres. Sicher bin ich mir nur das man es immer besser machen könnte :)
 

rafoldi

Aktives Mitglied

AW: MySQL – Problem bei Abfrage

......
@rafoldi ich kenne over partition nicht könntest du dazu vielleicht ein beispiel geben?
....

Guten Morgen,
ja ich denke da warst Du bereits auf dem richtigen Wege.....
Anbei ein Beispiel direkt von MS
Code:
SELECT ROW_NUMBER() OVER(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS "Row Number",      p.LastName, s.SalesYTD, a.PostalCode FROM Sales.SalesPerson AS s      INNER JOIN Person.Person AS p          ON s.BusinessEntityID = p.BusinessEntityID     INNER JOIN Person.Address AS a          ON a.AddressID = p.BusinessEntityID WHERE TerritoryID IS NOT NULL      AND SalesYTD <> 0 ORDER BY PostalCode;
Das ganze benötigt kein Suquerry und der SQL Statement kann in einem Rutsch ausgeführt werden. Sollte auch bei anderen DB's wie MySQL funktionieren.

Der Trick bei der Sache ist wie die Partition gebildet wird.
PostalCode ORDER BY SalesYTD DESCErst das Feld oder mehrere, danach noch etwas geschickt sortieren. Beispielsweise nach Datum etc. Anschließend counted die DB Die gleichen Datensätze durch welche im Result (untere Join / Where Bedingung) entstehen.
 
I

ILB_100

Guest

AW: MySQL – Problem bei Abfrage

Hey Leute

Danke vielmals für eure Inputs! Es hat so weit geklappt, als dass ich nun alle Artists erhalte, die zwei Oscars gewonnen haben (egal in welcher Kategorie).

Mein Ziel ist es nun aber, nur die Artists, die mind. einen Oscar in der Kategorie Hauptdarsteller (ID=1) UND einen Oscar in der Kategorie Nebendarsteller (ID=2) gewonnen haben, aufzulisten. Das heisst die Artists, welche zwar zwei Oscars haben, aber in der gleichen Kategorie, will ich nicht haben. Geht das irgendwie?
 

fotosaugsburg

Nicht mehr ganz neu hier

AW: MySQL – Problem bei Abfrage

Hi

Ich habe das zwar jetzt nicht ausprobiert, könnte aber so in etwa gehen


SELECT[FONT=&quot]
DISTINCT artist[/FONT]
.`name` FROM[FONT=&quot]
artist[/FONT]

Where (artist.artid = select oscar.artid from oscar where oscar.artID = artist.artID and oscar.katid = 1)
And
(artist.artid = select oscar.artid from oscar where oscar.artID = artist.artID and oscar.katid = 2)
[FONT=&quot] [/FONT]
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.616
Beiträge
1.538.358
Mitglieder
67.536
Neuestes Mitglied
QuestionMark
Oben