Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> MySQL-Problem
deluxe89
Geschrieben am: So 25.07.2004, 19:18
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 25.07.2004


Hi,
ich habe eine Tutorial-Datenbank programmiert. Nun möchte ich eine Statistik mit
den Top Postern erstellen.

CODE

SELECT
users.ID,
users.name,
COUNT(tutorials.ID) AS num_tutorials
FROM
users,
tutorials
WHERE
users.ID = tutorials.posterID
GROUP BY
users.ID
ORDER BY
num_tutorials DESC,
users.name ASC;



Das Problem dieses Queries ist, dass er Benutzer mit keinen Tutorials nicht
ausliest. Wie würdet ihr das Problem lösen?


THX im Voraus!

deluxe
Top
PMEmail Poster
Top
 
 
Irene
irene.ch
#2 Geschrieben am: So 25.07.2004, 20:06 (+00:48)
Report PostQuote Post

AyomRank 7
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 1114
Mitglied seit: 3.05.2004


Ich benutz zwar kein MySQL, aber ich denke, so müsste es gehen:

SELECT users.ID, users.name, COUNT(tutorials.ID) AS num_tutorials
FROM users, tutorials
WHERE (users.ID = tutorials.posterID) or (tutorials.posterID is null)
GROUP BY users.ID
ORDER BY num_tutorials DESC, users.name ASC;


Wenn Du die Verknüpfung zwischen zwei Tabellen machst, werden automatisch alle Records herausgefiltert, die in einer der Tabellen keine Entsprechung haben. Mit dem "is null" werden auch diese Records berücksichtigt. Das Feld num_tutorials hat im Resultat bei den Usern, die keine Tutorials haben, halt einfach null.

Griessli
Irene


--------------------
Top
PMUsers Website
Top
 
deluxe89
#3 Geschrieben am: Mo 26.07.2004, 09:09 (+13:02)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 25.07.2004


Leider funktioniert der Query auch nicht. Es werden, wie zuvor, nur Benutzer
mit mindestens einem Tutorial ausgelesen.

In PHPMyAdmin steht bei dem posterID Feld:
NULL : yes
DEFAULT: NULL


Müsste also eigentlich klappen...
Wisst ihr, woran es liegt?

deluxe
Top
PMEmail Poster
Top
 
Josh
#4 Geschrieben am: Mo 26.07.2004, 09:25 (+00:16)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Moderatoren
Beiträge: 2142
Mitglied seit: 19.10.2003


versuchs mal mit nem join:

CODE
SELECT
a.id
,a.name
count(b.id) AS num_tutorials
FROM
 users a
JOIN
 tutorials b ON a.ID = b.postID
GROUP BY
 a.ID
ORDER BY
 num_tutorials ASC
 ,a.name DESC


wenns nicht klappt, streich unnötige ORDER BY oder GROUP BY raus um zu sehen, obs dann klappt. sonst gib mal n sql-dump, damit ich das lokal testen könnte.

gruss
j0sh


--------------------
Mein letztes Projekt: Atelier-Schmuck.ch

"Das habe ich nie getan und werden es auch nie wieder tun!" :lol:
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Josh
#5 Geschrieben am: Mo 26.07.2004, 09:27 (+00:02)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Moderatoren
Beiträge: 2142
Mitglied seit: 19.10.2003


QUOTE
Es werden, wie zuvor, nur Benutzer
mit mindestens einem Tutorial ausgelesen.


nun, ich denke mal, mysql stört es, wenn 0 einträge gefunden werden und ignoriert dies. gib mal sql dump, vielleicht find ichs so raus.


--------------------
Mein letztes Projekt: Atelier-Schmuck.ch

"Das habe ich nie getan und werden es auch nie wieder tun!" :lol:
Top
PMEmail PosterUsers WebsiteICQ
Top
 
deluxe89
#6 Geschrieben am: Mo 26.07.2004, 09:41 (+00:13)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 25.07.2004


Hi j0sh,
dein Query liest auch nur das gleiche aus wink.gif
Wegen einem MySQL-Dump... Ist schwierig, da in der Datenbank
auch nicht öffentliche Informationen drinstehen.

Langsam nervt mich das Prob blink.gif


Danke für eure Antworten!

deluxe
Top
PMEmail Poster
Top
 
Josh
#7 Geschrieben am: Mo 26.07.2004, 09:51 (+00:09)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Moderatoren
Beiträge: 2142
Mitglied seit: 19.10.2003


dann mach einen dump der struktur und füge ein paar fake-datensätze ein, wenn du mir nicht vertraust. rolleyes.gif


--------------------
Mein letztes Projekt: Atelier-Schmuck.ch

"Das habe ich nie getan und werden es auch nie wieder tun!" :lol:
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Roger Bobst
calac gmbh
#8 Geschrieben am: Mo 26.07.2004, 10:06 (+00:15)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 426
Mitglied seit: 15.02.2004


CODE
WHERE (users.ID = tutorials.posterID) or (tutorials.posterID is null)

Das wird nicht gehen, weil wenn ein User kein Tutorial geschrieben hat, da einfach kein Datensatz in der Tabelle sein wird. Kein Datensatz ist nicht mit NULL auslesbar.

Spontan fällt mir hier nur UNION ein. Das Vorgehen wäre dann: mit ersten Select alle auslesen, die was geschrieben haben, das 2. holt alle anderen raus und mittels UNION werden die beiden Resultsets verbunden.
Aber das wird erst in neueren mysql Versionen unterstützt. Welche mysql Version hast du denn auf dem Server ?

Vielleicht ginge es auch mit JOINS, da gibt es ja verschiedene Typen. Da ich diese aber immer verwechsle dry.gif , empfehle ich dir, diese schnell selber zu studieren.

Gruss
Roger
Top
PMEmail PosterUsers Website
Top
 
Josh
#9 Geschrieben am: Mo 26.07.2004, 10:40 (+00:33)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Moderatoren
Beiträge: 2142
Mitglied seit: 19.10.2003


QUOTE
Vielleicht ginge es auch mit JOINS, da gibt es ja verschiedene Typen. Da ich diese aber immer verwechsle  , empfehle ich dir, diese schnell selber zu studieren.


genau, schieb beim join mal ein "OUTER" vorne ran, dann probier's noch mit "LEFT" und "RIGHT". könnte funktionieren, könnte dann aber auch ungewollt viele datensätze ausspucken...


--------------------
Mein letztes Projekt: Atelier-Schmuck.ch

"Das habe ich nie getan und werden es auch nie wieder tun!" :lol:
Top
PMEmail PosterUsers WebsiteICQ
Top
 
deluxe89
#10 Geschrieben am: Mo 26.07.2004, 14:10 (+03:29)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 25.07.2004


Hi,
mit LEFT JOIN funktioniert es nun. Könnt ihr mir erklären, wie es funktioniert, da
die MySQL-Manual nicht sehr viel hergibt.

Wäre nett.

deluxe
Top
PMEmail Poster
Top
 
Roger Bobst
calac gmbh
#11 Geschrieben am: Mo 26.07.2004, 14:23 (+00:13)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 426
Mitglied seit: 15.02.2004


hier die Beschreibung zu JOIN:
http://www.w3schools.com/sql/sql_join.asp
Top
PMEmail PosterUsers Website
Top
 
deluxe89
#12 Geschrieben am: Mo 26.07.2004, 17:06 (+02:43)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 25.07.2004


Hat sich nun alles geklärt.
THX

deluxe
Top
PMEmail Poster
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/2317

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Lost connection to MySQL cr4m0 28 0 Sa 22.11.2008, 10:51
Kleines Problem mit preg_replace... BartTheDevil89 69 3 Do 20.11.2008, 22:13
MySQL Frage G.P. 91 2 Mo 17.11.2008, 15:59
Suche Freelancer: Ajax, XML, PHP, MySQL omc 298 3 Mi 12.11.2008, 18:22
Problem bei Mail-Versand PH 323 14 Di 11.11.2008, 08:32
Einbinden vonn RSS feeds in Typo3 / MYSQL e-card 10799 5 Di 4.11.2008, 18:36
MySql Frage - ID Ändern EuD 109 2 Di 4.11.2008, 11:09
mysql query vereinfachen Big Rob 154 5 Mo 3.11.2008, 22:40
mysql Dump Städte pl_90 149 2 So 26.10.2008, 01:13
MySQL Befehl G.P. 160 5 Fr 24.10.2008, 15:58




Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]