sql JOIN oder ????
Ingo
- php
Hallo habe zwei Tabellen erste Tabelle mit
Denn Spalten ---abteilung--- gruppe--- Gruppe ist der INDEX und mit UNIQUE belegt.
In der zweiten Tabelle sind die Spalten
---gruppe--- zeit--- ort ---partner--- Hier stehen in der Gruppe mehr gleiche Einträge die ich zählen möchte.
Ich möchte einzelnen Gruppen ausgeben und deren Anzahl in Tabelle zwei.
Kann mir da vielleicht jemand auf die Sprünge helfen???
Wie sieht die abfrage aus.
Danke im Voraus.
Bz. Gruppe x hat x Einträge.
echo $begrüßung;
Hallo habe zwei Tabellen [...]
Ich möchte einzelnen Gruppen ausgeben und deren Anzahl in Tabelle zwei.
Kann mir da vielleicht jemand auf die Sprünge helfen???
Du weißt ja schon, dass das mit einem JOINs zu lösen geht. Würdest du dir bitte die Mühe machen, die Dokumentation deines Datenbanksystems zu befragen, wie diese zu formulieren sind oder aber die Suchfunktion dieses Forums zu nutzen oder eine andere dir genehme Suchmaschine nach einem SQL-Tutorial zu befragen. Die dann noch übrig gebliebenen Unklarheiten wird dir hier gern jemand beantworten.
Beispielsweise: http://www.w3schools.com/sql/ - http://www.w3schools.com/sql/sql_join.asp
echo "$verabschiedung $name";
yo,
Ich möchte einzelnen Gruppen ausgeben und deren Anzahl in Tabelle zwei.
SELECT tab1.gruppe, COUNT(*) AS Anzahl
FROM tab1 LEFT JOIN tab2 ON (tab1.gruppe = tab2.gruppe)
GROUP BY tab1.gruppe
Ilja
@performance ilja:
da du ja so großen wert auf geschwindigkeit legst, und IMMER eine schnellere abfrage findest als andere user, frage ich dich, welchen performance gewinn der von dir eingesetzte join bringen soll.
der join ist hier völlig überflüssig und benötigt nur weitere zeit.
das passiert halt, wenn man sich nicht für die anforderung interessiert und nur seinen hacker-blick hat.
die anforderung lautet: gebe zu jeder gruppe die anzahl der einträge.
das ergebnis ist eine 2-spaltige tabelle mit den spalten gruppe und anzahl.
die einzige sinnvolle lösung hierfür lautet:
SELECT gruppe, COUNT(*) AS anzahl FROM tab2 GROUP BY gruppe
aber du findest sicherlich noch eine schnellere 'abfrage'. vielleicht 'erklärst' du hierbei gleich den einfluß eines indexes und der ggfls. sortierten tabelle.
yo,
da du ja so großen wert auf geschwindigkeit legst, und IMMER eine schnellere abfrage findest als andere user, frage ich dich, welchen performance gewinn der von dir eingesetzte join bringen soll.
performance ist sicherlich nur ein aspekt unter vielen, den man im auge behalten sollte.
der join ist hier völlig überflüssig und benötigt nur weitere zeit.
der join kostet sicherlich performance. aber deswegen muss er noch nicht überflüssig sein.
die einzige sinnvolle lösung hierfür lautet:
SELECT gruppe, COUNT(*) AS anzahl FROM tab2 GROUP BY gruppe
auf der ersten blick eine verlockende lösung. aber der JOIN hat schon seinen sinn oder vielmehr gesagt, der OUTER JOIN. geht man alleine von der zweiten tabelle aus, so kann es durchaus sein, dass eine gruppe zwar in der ersten tabelle vorhanden ist, aber nicht in der zweiten tabellen. dann würde diese gruppe mit 0 einträgen unter den tisch fallen. der OUTER JOIN stellt nun sicher, dass wirklich alle gruppen auch mit 0 einträgen aufgelistet werden.
ich stehe wohl unter besonderer beobachtung....
Ilja
schön daß du auch die gruppen mit 0 einträgen berücksichtigst. das hat der fragesteller zwar nicht mit einer einzigen silbe anklingen lassen, aber du kennst die anforderungen des fragestellers offensichtlich besser als dieser selbst.
ich zitiere die fragestellung: "Ich möchte einzelnen Gruppen ausgeben und deren Anzahl in Tabelle zwei."
was unter "einzelnen" in diesem kontext zu verstehen ist, klingt nach einer chinesischen übersetzung. ich habe daher das vermutlich nur falsch geschriebene wort "einzelnen" zu "einzelne" korrigiert. dies ergibt dann sinn.
"einzelne" bedeutet dann nicht "alle", sondern diejenigen mit einer anzahl.
deine erklärung zum outer join läßt sich transparenter formulieren:
es kann nur gezählt werden, was vorhanden ist. COUNT bedeutet nun einmal zählen. und zwar das, was vorhanden ist.
mit deinem join möchtest du auch das zählen, was nicht vorhanden ist. tatsächlich zählst du aber etwas vorhandenes. es handelt sich hierbei um die anzahl der NULL verknüpfungen, welche als 0 gezählt wird. logisch korrekt müßte COUNT hierfür NULL zurück liefern.
yo,
ich denke mal, wir sollten den kleinkrieg der verletzten eitelkeiten damit beenden, dass sich nun Ingo, einer der beiden vorschläge aussuchen kann. mehr habe ich dazu nicht mehr zu sagen.
Ilja
ich kann keinen kleinkrieg beenden, da ich so etwas weder vorhatte noch vorhaben werde.
eitelkeiten sind schön für jemanden, der damit etwas anfangen kann. ich gehöre nicht dazu.
der sinn dieses forums besteht hoffenlich nicht aus einem dieser aspekte, sondern in dem austausch von erfahrungen, welche in erster linie an weniger bewanderte 'neulinge' als hilfreiche unterstützung gegeben werden können.
in diesem sinne sollte sich die weitere beteiligung an diesem forum auf diesen konstruktiven beitrag beschränken.