php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.10.2011, 23:01  
Neuer Benutzer
 
Registriert seit: 03.10.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
toddlo befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] MySQL-Abfrage mit unterschiedlichen Kriterien in n:m Verknüpfung

Liebe Leute,
ich habe ein MySQL query Problem, an dem ich mir die Zähne ausbeiße. Ich habe eine Tabelle mit Personendaten und eine Tabelle mit Gruppen (in diesem Fall Sportarten: Handball, Badminton usw.). Es handelt sich um eine n:m Verknüpfung, deshalb gibt es eine dritte Tabelle, die die Brückenfunktion übernimmt:

Personen:
id | vorname | nachname | geburtsdatum

Gruppen:
id | Gruppename

Bruecke:
personen.id | gruppen.id

Soweit so gut. Nun will ich aber Personen abfragen und dabei unterschiedliche Gruppenkriterien kombinieren. Z.B.:

- alle Personen, die Badminton, aber nicht Fußball spielen
- alle Personen, die nur Handball spielen
- alle Personen, die Fußball und Volleyball spielen und unter 25 Jahre alt sind
- usw.

Ich habe mit joins, subqueries und der EXIST()-Funktion herumgespielt, aber ich finde einfach keine Lösung, unterschiedlichen Gruppen-Kriterien zu verbinden. Kann mir jemand einen Tipp geben?

Besten Dank
toddlo
toddlo ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.10.2011, 23:49  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hi,

rein von der Logik her sollte ein Subquery gehen, auch wenn es ggf. performantere Loesungen gibt:

Code:
SELECT *
FROM person
WHERE
  id IN (SELECT person_id FROM person_has_group WHERE group_id = #1)
  AND
  id NOT IN (SELECT person_id FROM person_has_group WHERE group_id = #2)
#1 waere bspw. Fussball, #2 Badminton.

Ich hab die Tabellen auch gleich umbenannt, Bruecke ist wirklich etwas nichtssagend, zumal wenn noch mehr n:m-Tabellen dazu kommen.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 04.10.2011, 22:23  
Neuer Benutzer
 
Registriert seit: 03.10.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
toddlo befindet sich auf einem aufstrebenden Ast
Standard

Super, das war's, Danke! Irgendwie stand ich da auf dem Schlauch und hatte sowohl ein join als auch die subquery mit drin.

Viele Grüße
toddlo
toddlo ist offline   Mit Zitat antworten
Alt 05.10.2011, 13:15  
Erfahrener Benutzer
 
Registriert seit: 21.09.2010
Beiträge: 143
PHP-Kenntnisse:
Anfänger
Zulakis befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Chriz Beitrag anzeigen
rein von der Logik her sollte ein Subquery gehen, auch wenn es ggf. performantere Loesungen gibt
Nur mal so aus Interesse, was wäre denn performanter?
Zulakis ist offline   Mit Zitat antworten
Alt 05.10.2011, 14:59  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Also wenn eine Entität 2 Querverbindungen aufweisen muss (hat Fußball, hat Tischtennis), dann kann man zwei JOINs anwenden, Gruppieren und mit HAVING COUNT(*) = 2 testen, ob es auch zwei Treffer gab. Das ist soweit ich weiß deutlich schneller, weil column IN (SELECT ..) erfahrungsgemäss sehr langsam ist. Ob anfangs genanntes Gruppieren und Zählen aber in Kombination mit Nicht-Existenz (hat Fußball, hat nicht Badminton) funktioniert weiß ich grade nicht. Mir fällt auf Anhieb kein Query ein.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mysql abfrage in mysql abfrage tsunder Datenbanken 8 06.09.2011 16:42
[Erledigt] MySQL Abfrage über Funktion (2 Datenbanken)? markiloy PHP Einsteiger 4 31.08.2011 23:30
[Erledigt] MySQL Abfrage mit mehreren Keywörtern inox PHP Einsteiger 16 15.02.2011 18:18
MYSQL Abfrage von 4 Datenbanken da_mike PHP Einsteiger 47 08.02.2011 15:02
Frage: richtige SQL Abfrage von einer MySQL Spalte die SET werte besitzt Seb PHP Tipps 2008 2 29.05.2008 11:36
Datum bezogene mysql abfrage ApfeL Datenbanken 5 22.10.2006 16:03
MySQL Abfrage macht Seite langsam Datenbanken 11 19.10.2006 19:38
MySQL Abfrage Von / Bis andrew22 Datenbanken 1 02.10.2006 11:04
MySQL - Abfrage: Unterschiedliche Ergebnisse aus PHP/manuell horstenpeter Datenbanken 3 16.07.2006 13:22
mysql abfrage in Schleife havok PHP Tipps 2006 6 09.05.2006 08:39
Abfrage bei mySQL 4 ApfeL Datenbanken 5 24.03.2006 18:53
MySQL Abfrage Problem. web2 PHP Tipps 2005-2 7 25.07.2005 11:07
Mysql Abfrage Datenbanken 4 27.02.2005 22:26
komplizierte mySQL Abfrage Datenbanken 6 25.06.2004 15:34
[Erledigt] mysql Abfrage Datenbanken 5 18.06.2004 14:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql n:m php query, select mit unterschiedlichen where kriterien einzelne abfrage, mysql ergebniss einer abfrage suchkriterium, mysql select mit mehreren n:m verknüpfungen, php mysql 1:n verknüpfen, zweiten abfragen in einer mit unterschiedlichen kriterien, mysql queries verknüpfen, mysql zwischentabelle n:m abfrage, 1:n abfrage mit mysql, kriterien abfrage in m:n tabelle, zwei unterschiedliche abfragen in mysql, mysql abfrage kriterien, php mysql n:m query, mysql alle unterschiedlichen abfragen, n:m query, mysql 1:n abfrage, mysql query kriterium, alle informationen query mysql n:m

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:45 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum