 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
21.12.2005, 23:34
|
#1
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
SQL Select Statement
Hi, ich bräuchte mal Hilfe bei einem Select-Statement:
Ich habe eine Tabelle mit drei Feldern:
User, Id, Counter
und den Beispielswerten:
A 00 01 // User="A", Id="00" und Counter="01"
A 00 02
A 01 03
A 00 04
B 00 05
A 00 06
C 02 07
C 03 08
B 02 09
A 03 10
A 04 11
Nun möchte ich wissen, welcher User die erste Id gespeichert hat. Also als Ergebnis müßte das folgende rauskommen.
A 00
A 01
C 02
C 03
A 04
Das folgende funktioniert nicht: [ peinlich, ich weiß, aber ich komm' nicht drauf]
select user, id where 1 group by Id limit 1
UseCase: Ich speichere für mein "Jokoban" jeweils die besten Levellösungen Ist eine Lösung besser als die bisherige, setze ich die alte Lösung inaktiv und füge einen neuen Satz sein. Nun will ich in einer Statistik die User ausgeben, die die meisten Level als erster gelöst haben. Nachfolgende Lösungen sind nämlich einfacher ;-)
Kann mir jemand auf die Sprünge helfen?
Danke!!!
|
|
|
22.12.2005, 01:03
|
#2
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
order!
"SELECT user, id FROM tabellenname group by Id limit 1 ORDER by id ";
where 1 kannst weglassen
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
22.12.2005, 01:51
|
#3
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Du erreichst das so:
SELECT distinct id,user FROM `tabelle` group by id
|
|
|
22.12.2005, 12:21
|
#4
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Danke, da war ich ja gar nicht so weit weg davon ;-)
Okay, jetzt gehe ich weiter und will wissen, wieviele erste Level-Lösungen hat jeder User
Also mache ich folgendes:
select user, count(*) from (SELECT distinct id,user FROM `jokoban` group by id) group by user
Das sollte doch eigentlich gehen, oder? Wie's aussieht, unterstützt aber mySQL keine Subqueries oder? Wenn ja, wie könnte man das auch noch formulieren?
...ich könnte natürlich auch einen View in die Datenbank spielen
|
|
|
22.12.2005, 12:51
|
#5
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
leider wird das so nicht gehen. MySQL unterstützt subqueries erst ab 4.1, und dann auch nur in der Where-Klausel.
machs doch so:
PHP-Code:
$res=mysql_query("SELECT distinct id,user FROM `tabelle` group by id
order by user");
$score=Array();
while($row=mysql_fetch_assoc($res)) {
$score[$row['user']][]=$row['id'];
}
dann hast Du für user A z.b. die Anzahl in count($score['A'])
|
|
|
22.12.2005, 19:12
|
#6
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
ohne eine Where-Klausel hat er aber alle und nicht nur die 1st-Level-Id's in $res.
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
22.12.2005, 19:40
|
#7
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
er will ja auch nur die first-level-user haben, das haut schon hin
Also das Ergebnis was Frank oben gepostet hat, und das dann auch noch ausgewertet nach Häufigkeit.
Du kannst Dir gerne eine Tabelle anlegen und es mal ausprobieren, es funktioniert wunderbar.
|
|
|
22.12.2005, 23:25
|
#8
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Danke, werd's morgen austesten, ist aber schade, daß mySQL keine Subqueries kann.
Andere Frage: Ist das Statement
Code:
SELECT distinct id,user FROM `tabelle` group by id
eigentlich SQL-konform? Auf das groupierte Feld darf man doch eigentlich nur eine Aggregat-Funktion anwenden, oder?. Bin jetzt auch überrascht, daß mySQL das "schluckt".
Okay, bis morgen
Tschau
Frank
|
|
|
23.12.2005, 00:13
|
#9
|
|
Guest
Registriert seit: Aug 2002
|
Zitat:
|
Zitat von Malleus
Auf das groupierte Feld darf man doch eigentlich nur eine Aggregat-Funktion anwenden, oder?
|
Du verwechselst hier, wie ich vermute, ORDER BY und GROUP BY. Das ist also schon erlaubt. 
|
|
|
27.12.2005, 13:42
|
#10
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Hi, ich nochmal. bevor ich die PHP-Variante mache, hab' ich mal versucht, einen View zu erzeugen, den ich dann summieren kann:
Also gebe ich im mySQL-Query Browser folgendes ein:
Code:
create view `test`as SELECT distinct id,user FROM `jokoban` where checked='1' group by id
Als Ergebnis kommt nun mySQL-Error 1064. Hat jemand eine Idee, was das sein könnte?
@Strogij: Hi, wenn ich das Statement auf den MS-SQL Server absetze, gibt's eine Warnmeldung, das es nicht zulässig ist ???
|
|
|
27.12.2005, 14:53
|
#11
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
...hab's selbst rausgefunden: Es gibt keine Views in mySQL 4.0! Nur warum bietet dann der mySQL QueryBrowser diese Option an? Man muß nicht alles verstehen.
Tschau
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| 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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.
|
 |