[MYSQL] (Letzte Störung) Angabe für Screenshots falsch!
-
Hallo,
also ich fange an zu nerven, ich weiß.
Aber mein Ausdruck will nicht:SELECT t1.id, t1.topic, t1.team, t1.startdate, t1.situation, COUNT(DISTINCT t2.name) AS contributors, ROUND(AVG(t3.percent),2) AS percent, COUNT(t4.id) AS screenshots FROM PrjHaupt AS t1 LEFT JOIN PrjMitarbeiter AS t2 ON t2.prjid = t1.id LEFT JOIN PrjFortschritt AS t3 ON t3.prjid = t1.id LEFT JOIN PrjScreenshot AS t4 ON t4.prjid = t1.id GROUP BY t1.id ORDER BY t1.situation
Der Ausdruck ist fast fehlerfrei, allerdings nicht ganz.
Für Screenshots gibt er 15 an, wenn ich einen einzigen Screenshot hochlade bzw. nur einen Eintrag in PrjScreenshot habe.
Bei 2 Screenshots kommt 30 raus.
Und wenn ich die Mitarbeiter danach von 2 auf 3 erhöhe, kommt 40 raus, obwohl Mitarbeiter nichts damit zu tu hat, nichts damit zu tun haben soll!Wer kann mir da helfen?
-
Du müsstest schon etwas genauer angeben, wie deine Tabellen aussehen.
Aber ich denke mal, dass der Fehler durch eine falsche Verknüpfung der Tabellen entsteht. Lass dir im Ergebnis einfach mal alle Spalten ausgeben und lass da dann auch das GROUP BY erstmal wegViel Glück :xmas1:
-
Ohne das GROUP BY klappt aber das COUNT nicht.
Also eigentlich soll er ja nur die Einträge vpn PrjScreenshot zählen, die prjid = t1.id haben, aber er verbindet das mit anderen tabellen, ich gluabe da benötigt ihr keine Infos für die einzelnen Tabellen oder?
Anscheinend ist hier etwas falsch verknüpft.MfG MAV
-
Also ich weiß nicht woran es lag, obwohl ich schätze, dass jetzt für jeden LEFT JOIN 2. Grades alle LEFT JOINs 3. Grades ausgeführt werden und der daher sehr hoch zählen würde, aber ich habe einfach ein DISTINCT eingeschaltet, dadurch werden Doppelzählungen einfach nicht gewertet.
Das ist aber irgendwie auch sinnlos, denn eigentlich habe ich ja keine doppelten EInträge bei id.
Naja, was solls mein Ausdruck ist jetzt jedenfalls fertig. ^^MfG MAV
-
Mis2com schrieb:
Ohne das GROUP BY klappt aber das COUNT nicht.
Das ist klar! Mit alle meinte ich einfach mal ein SELECT *, damit du siehst, ob die Tabellen richtig verknüpft werden.
Das mit dem DISTINCT ist aber auch nicht so das Wahre
Wenn du mir mal den SQL-Code schickst kann ich bei mir mal etwas rumprobieren, wenn du sagst, was du brauchst
-
Also den SQL Code hast du ja.
Dumeinst meine Tabellen?PHPMyAdmin schrieb:
CREATE TABLE `PrjHaupt` (
`id` int(5) NOT NULL auto_increment,
`startdate` int(10) default NULL,
`situation` enum('preparation','in work','break','finished') default NULL,
`team` varchar(30) default NULL,
`description` text,
`topic` varchar(50) default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;CREATE TABLE `PrjFortschritt` (
`prjid` int(5) default NULL,
`topic` varchar(30) default NULL,
`percent` tinyint(4) default NULL,
`id` int(5) NOT NULL auto_increment,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=13 ;CREATE TABLE `PrjMitarbeiter` (
`id` int(5) NOT NULL auto_increment,
`userid` int(5) default NULL,
`prjid` int(5) default NULL,
`name` varchar(30) default NULL,
`area` varchar(20) default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;CREATE TABLE `PrjScreenshot` (
`id` int(5) NOT NULL auto_increment,
`prjid` int(5) default NULL,
`topic` varchar(50) default NULL,
`date` int(10) default NULL,
`fileending` char(3) default NULL,
`descr` tinytext,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;
-
hast du evtl. noch ein paar INSERTs für mich?
-
Kannst du doch selber machen.
Du musst nur darauf achtenb, dass prjid die id von der id von PrjHaupt hat, alles andere ist Wurscht.
-
sind die so geheim, dass du sie mir nicht kurz mit phpmyadmin exportieren kannst. Das Anlegen mag ich nämlich immer überhaupt nicht
-
Unjd ich mag das Exportieren nicht.
Aber was soll's, es ist ja für einen guten (meinen) zweck.
INSERT INTO `PrjHaupt` VALUES (5, 1077490800, 'preparation', 'M.A.V.', 'Laber\r\n', 'Silva - Im Blick des Todes'); INSERT INTO `PrjFortschritt` VALUES (5, 'Programmierung', 50, 8); INSERT INTO `PrjFortschritt` VALUES (5, 'Planung', 100, 9); INSERT INTO `PrjFortschritt` VALUES (5, 'Geschichte', 30, 10); INSERT INTO `PrjFortschritt` VALUES (5, 'Grafik', 90, 11); INSERT INTO `PrjFortschritt` VALUES (5, 'Dingsbumse', 20, 12); INSERT INTO `PrjMitarbeiter` VALUES (6, NULL, 5, 'Michael A. Völkel', 'Musik'); INSERT INTO `PrjMitarbeiter` VALUES (5, NULL, 5, 'Michael A. Völkel', 'Programmierung'); INSERT INTO `PrjMitarbeiter` VALUES (8, NULL, 5, 'Nave Maxe geeValo', 'Grafik'); INSERT INTO `PrjMitarbeiter` VALUES (9, NULL, 5, 'Bob', 'Essen'); INSERT INTO `PrjScreenshot` VALUES (7, 5, 'Ein Apfel kommt selten allein', 1072793743, 'gif', 'Dieser Apfel kommt leider selten allein.\r\nDas ist abernicht schlimm, wenn man den Überdingsbumser hat!'); INSERT INTO `PrjScreenshot` VALUES (8, 5, 'Laber', 2147483647, 'txt', 'Laber');
So, da hast du
-
Hm - irgendwie fällt mir im Augenblich auch nichts gescheites ein
Aber muss das denn unbedingt alles in eimen SQL-Query sein? Evtl. wäre es besser, du würdest die Infos nacheinander abfragenAnsonsten nimm einfach dein DISTINCT, ist wohl doch nicht sooo schlecht
-
Ja, ich hätte es schon gerne in einem Ausdruck, finde ich schöner.