ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
501
501
EMPFEHLEN
-
Tabelle:
Vorname -- Nachname -- Gruppe
Thomas -- Müller -- 5
Thomas -- Müller -- 6
Margit -- Baumann -- 2
Wie krieg ich es nun gebacken alle Namen die mehrfach vorkommen mit den verwschiedenen Gruppenzugehörigkeiten auszugeben.
Ich möchte also nicht speziell nach dem Müller suchen, sondern nach ALLEN namen die mehrfach vorkommen *seufz*
Profisache, oder ?
-
Wie wär es hiermit:
Gruß hpvwCode :1 2 3 4 5 6 7 8 9 10
SELECT a.nachname, a.vorname, a.gruppe FROM Tabelle a WHERE 1<(SELECT COUNT(*) FROM Tabelle b WHERE a.vorname=b.vorname AND a.nachname=b.nachname) ORDER BY a.nachname, a.vorname
Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
hmmm, ich stell die Aufgabe noch einmal
Tabelle:
#############
Vorname - Nachname - Gruppe
Müller - Thomas - 1
Müller - Thomas - 2
Müller - Thomas - 5
Springer - Thomas - 1
Rauskommen soll:
Müller Thomas ist in Gruppe 1,2 und 5
Und das ganze soll er mir für alle Namen machen, die auch in einer anderen Gruppe sind.
Interessant sind nur die Leute, die auch in einer anderen Gruppe sind.
Springer Thomas interessiert mich hier nicht.
schwierig , oder ?
Danke
Soapp
-
Wenn ich auf die Tabelle oben angesprochenes Query anwende, erhalte ich doch das, was Du sagst:
Du kannst natürlich auch folgendes Query anwenden:Code :1 2 3 4
nachname vorname gruppe Müller Thomas 1 Müller Thomas 2 Müller Thomas 5
Das Ergebnis sieht dann so aus:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
SELECT CONCAT( a.vorname, ' ', a.nachname, ' ist in Gruppe ', GROUP_CONCAT(a.gruppe ORDER BY a.Gruppe ASC SEPARATOR ', '), '.' ) AS Text FROM Tabelle a WHERE 1<(SELECT COUNT(*) FROM Tabelle b WHERE a.vorname=b.vorname AND a.nachname=b.nachname) GROUP BY a.nachname, a.vorname
Wie Du das "und" da rein bekommst, musst Du mal schauen.Code :1 2
Text Thomas Müller ist in Gruppe 1, 2, 5.
Gruß hpvwWarum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Zitat von hpvw
WIE MACHST DU DAS ?
WIe kannst du dir bitte DIESE QUERYS aus dem Gehirn raussaugen ?
Wie lange dauert das, bis ich das auch kann ?
Machst du das beruflich ?
Ich werds morgen mal ausprobieren..
Schade nur, dass ich die Query ned verstehe .. Wahnsinn
Gut Nacht
-
MIt der Tastatur
Zitat von Soapp
Mit dem Verständnis für die nötige Theorie, die hinter relationalen Datenbanken steht, dem MySQL-Handbuch und vielleicht hilft auch ein bisschen Analyse des gewünschten Ergebnis.
Zitat von Soapp
Das kann ich Dir nicht beantworten. Mein erster Kontakt mit Datenbanken war vor 7 oder 8 Jahren in der Schule. Da ging es ausschließlich um Theorie und wir haben kein Stück mit SQL gearbeitet (das hat mir am meisten gebracht und war definitiv das wichtigste, was ich in der Schule gelernt habe). Dann habe ich mich ein bisschen mit einfachen Querys beschäftigt, dann die Datenbanken in Ruhe gelassen und mich vor ca. 4 Jahren wieder damit beschäftigt. Da das bis vor ca. einem Jahr nie besonders intensiv war, sollte man wesentlich schneller als ich damit klarkommen, wenn man es will.
Zitat von Soapp
Datenbanken sind immer nur ein Hilfsmittel, in so fern: Jein.
Zitat von Soapp
Grundlage der relationalen Datenbanken ist die Theorie. Ich habe in diesem Forum schon mal irgendwo erwähnt, dass selbst ich, der lieber einfach loslegt und seit dem Beginn des Studiums die Schnauze voll von Theorien hat, denke, dass die Theorie bei relationalen Datenbanken unabdingbar zum Verständnis und effektiven Umgang mit selbigen ist. Ich habe auch schon mehrfach zu den Artikeln von Kelz und Moschner verlinkt, die ich sehr gut für einen nicht einfachen aber sinnvollen Einstieg halte. Auch der Artikel zur Normalisierung in der Wikipedia ist ganz gut. Danach kann man sich mit den Grundlagen der Syntax beschäftigen und die Funktionen im MySQL-Handbuch (denk' nicht, dass ich das nicht mehr brauche!) nachschlagen, um das Query zu verstehen.
Zitat von Soapp
Gruß hpvwWarum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Zitat von hpvw
Wieso Tabelle a und Tabelle b ? *kopfkratz*
-
Oh ja, konklrete Fragen sind so viel besser.
Zitat von Soapp
Die "Tabellen" a und b sind Aliasnamen für die Tabelle, die jeweils im FROM definiert werden.
Die Syntax von MySQL erlaubt bei Tabellen, dass man das Schlüsselwort AS dazwischen wegläßt.
Das ist nötig, damit MySQL weiß, was gemeint ist. Schließlich wird zwei mal auf die Tabelle zugegriffen, einmal im Hauptquery und einmal im Subquery. Insbesondere im WHERE des Subquery muss man MySQL dann eindeutig sagen, aus welcher der (gleichen) Tabellen er die Felder nehmen soll.
Gruß hpvwWarum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Dann müsste das SO passen, oder ?
Zitat von hpvw
$sql = "
SELECT CONCAT( a.vorname, ' ', a.nachname, ' ist in Gruppe ', GROUP_CONCAT( a.gruppe
ORDER BY a.Gruppe ASC SEPARATOR ', ' ) , '.' ) AS Text
FROM GUESTS a
WHERE 1 < (
SELECT COUNT( * )
FROM GUESTS b
WHERE a.vorname = b.vorname
AND a.nachname = b.nachname )
GROUP BY a.nachname, a.vorname
";
$start = mysql_query($sql);
while ($row = mysql_fetch_object($start))
{
echo $row->text;
}
MySQL said: Documentation
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a.gruppe ORDER BY a.Gruppe ASC SEPARATOR ', '),
'.'
)
Kann es sein dass das ganze erst abe 4.1 funktioniert ?Geändert von Soapp (25.10.05 um 10:24 Uhr)
-
Ja
Zitat von Soapp
Ja
Zitat von Soapp
Das zweite Query ist eigentlich auch nur ein bisschen Spielkram. Normalerweise lässt man sich die Daten zurückgeben und sorgt in der Anwendungssprache (hier vermutlich PHP) für die Ausgabe, ggf. mit Templates.
Das erste Query funktioniert durch das Subquery natürlich auch erst ab 4.1.
Ein Workaroud kann man mit JOIN schreiben:Mit PHP liest man das dann so aus:Code :1 2 3 4 5 6 7 8 9 10
SELECT DISTINCT a.nachname, a.vorname, a.gruppe FROM GUESTS a JOIN GUESTS b ON a.vorname=b.vorname AND a.nachname=b.nachname AND a.gruppe!=b.gruppe ORDER BY a.nachname, a.vorname, a.gruppe
Gruß hpvwPHP-Code:<?
//DB-Verbindung
$res=mysql_query("SELECT DISTINCT
a.nachname,
a.vorname,
a.gruppe
FROM GUESTS a
JOIN GUESTS b
ON a.vorname=b.vorname
AND a.nachname=b.nachname
AND a.gruppe!=b.gruppe
ORDER BY a.nachname, a.vorname, a.gruppe");
$tempVorname=null;
$tempNachname=null;
$tempGruppen=array();
while ($row=mysql_fetch_assoc($res)) {
if ($row['vorname']!=$tempVorname
&& $row['nachname']!=$tempNachname) {
if ($tempVorname!=null && $tempNachname!=null) {
$gruppen=implode(', ',$tempGruppen);
echo $tempVorname
.' '
.$tempNachname
.' ist in den Gruppen '
.$gruppen
.'.<br/>';
}
$tempVorname=$row['vorname'];
$tempNachname=$row['nachname'];
$tempGruppen=array();
}
$tempGruppen[]=$row['gruppe'];
}
if ($tempVorname!=null && $tempNachname!=null) {
$gruppen=implode(', ',$tempGruppen);
echo $tempVorname
.' '
.$tempNachname
.' ist in den Gruppen '
.$gruppen
.'.';
}
?>Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Zitat von hpvw
Danke, mit dem JOIN gehts
Ähnliche Themen
-
Zeige mir alle Daten, die älter sind als 7 Tage
Von kayut im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 06.02.10, 20:42 -
VISTA: Alle Ordner sollen gleich aussehen
Von PhoenixDH im Forum Microsoft WindowsAntworten: 2Letzter Beitrag: 16.07.08, 12:05 -
Video/Bild bleibt für alle Unterseiten gleich
Von fawad im Forum PHPAntworten: 5Letzter Beitrag: 01.06.08, 14:11 -
access.sql ( zeige mir alle datensätze wo nach x jahren nichts mehr eingetrage wurde)
Von ScarabXX im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 16.11.07, 13:26 -
MovieClip in alle Richtungen gleich skalieren
Von ali-gator im Forum Flash PlattformAntworten: 4Letzter Beitrag: 08.05.07, 15:17





Zitieren
Login





