art-d-sign
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 21.12.2005, 23:34   #1
TP-Moderator
 
Benutzerbild von Malleus
 
Registriert seit: Aug 2004
Ort: Homburg / Saarland
Malleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKE

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!!!
Malleus ist offline   Mit Zitat antworten


Alt 22.12.2005, 01:03   #2
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 22.12.2005, 01:51   #3
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Du erreichst das so:

SELECT distinct id,user FROM `tabelle` group by id
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 22.12.2005, 12:21   #4
TP-Moderator
 
Benutzerbild von Malleus
 
Registriert seit: Aug 2004
Ort: Homburg / Saarland
Malleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKE
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
Malleus ist offline   Mit Zitat antworten
Alt 22.12.2005, 12:51   #5
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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'])
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 22.12.2005, 19:12   #6
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 22.12.2005, 19:40   #7
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 22.12.2005, 23:25   #8
TP-Moderator
 
Benutzerbild von Malleus
 
Registriert seit: Aug 2004
Ort: Homburg / Saarland
Malleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKE
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
Malleus ist offline   Mit Zitat antworten
Alt 23.12.2005, 00:13   #9
Guest
 
Registriert seit: Aug 2002
Strogij hilft, wo's gehtStrogij hilft, wo's geht
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.
Strogij ist offline   Mit Zitat antworten
Alt 27.12.2005, 13:42   #10
TP-Moderator
 
Benutzerbild von Malleus
 
Registriert seit: Aug 2004
Ort: Homburg / Saarland
Malleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKE
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 ???
Malleus ist offline   Mit Zitat antworten
Alt 27.12.2005, 14:53   #11
TP-Moderator
 
Benutzerbild von Malleus
 
Registriert seit: Aug 2004
Ort: Homburg / Saarland
Malleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKE
...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
Malleus ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
SQL Select Statement SQL Select Statement
« [PERL] Probleme bei selectrow_hashref | Script-Zusammenstellung »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67