MySQL Query Problem

nautiLus`

Erfahrenes Mitglied
PHP:
SELECT  p.*, m.status, m.website, m.email, m.messenger, m.avatar, m.glow, m.sign, m.regdate, count(p.id)
FROM posts p LEFT OUTER JOIN members m 
USING (nick)
GROUP BY p.nick

Hi, obige abfrage wird in 2 tables durchgeführt:

PHP:
CREATE TABLE `members` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `status` tinyint(3) unsigned NOT NULL default '0',
  `nick` varchar(20) NOT NULL default '',
  `name` varchar(20) NOT NULL default '',
  `pass` varchar(19) NOT NULL default '',
  `email` varchar(50) NOT NULL default '',
  `website` varchar(255) NOT NULL default '',
  `` char(1) NOT NULL default '',
  `city` varchar(30) NOT NULL default '',
  `birth` varchar(10) NOT NULL default '',
  `messenger` varchar(255) NOT NULL default '',
  `avatar` varchar(255) NOT NULL default '',
  `glow` varchar(7) NOT NULL default '',
  `slogan` text NOT NULL,
  `sign` varchar(75) NOT NULL default '',
  `info` text NOT NULL,
  `regdate` datetime default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `email` (`email`)
)
und
PHP:
CREATE TABLE `posts` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `tid` smallint(5) unsigned NOT NULL default '0',
  `nick` varchar(20) NOT NULL default '',
  `content` text NOT NULL,
  `editdate` datetime default NULL,
  `editname` varchar(20) NOT NULL default '',
  `postdate` datetime default NULL,
  PRIMARY KEY  (`id`)
)

Die Abfrage liefert mir zwar das korrekte Ergebis beim count() aber sobald ich eine Having klausel dranhänge ist der count nicht mehr korrekt:

PHP:
SELECT  p.*, m.status, m.website, m.email, m.messenger, m.avatar, m.glow, m.sign, m.regdate, count(p.id)
FROM posts p LEFT OUTER JOIN members m 
USING (nick)
GROUP BY p.nick, p.id
HAVING p.tid = 1

Die Counts werden dann alle auf 1 gesetzt was ich aber nicht will.
Kann mir da wer bescheid sagen, was ich falsch mache!?

mfg Nauti
 
hmm,

mach mal dass tid noch in die GROUP BY mit rein, denn so bekomsmt du mehr als einen Satz zurück und dadurch istr logischerweise der COUNT immer 1 weil du zwar x Sätze findest aber dadurch dass der Server dir jeden Satz einzeln zurück gibt, weil TID nicht in GROUP BY ist, ergibt der Count immer 1 pro zurückgegeben Satz ;)
 
hmm,

wieviele Datensätze bekomsmt du zurück? Wohl imemrnoch mehr als einen, dann hast du eine PRoblem und zwar dass man Zählfunktionen nicht so zusammenfassen kann wie du es willst.
 
ja ich bekomme schon mehr als 1.
hab das aber mal bei einem anderen script auch gepackt, damit das richtig ging aber ich muss einfach weiter versuchen ansonsten muss ich einzelne count() abfragen machen! mal schaun ...

aber danke für die hilfe mal werde mich wieder melden wenn ich noch was nicht versteh :)

mfg nauti
 
hmm,

du musst doch nur die count Abfrage von der Restabfrage abkoppeln dann hast du auch nur zwei abfragen und ich denke dass du eh zeit sparst weil du den Count auskoppelst.
 
hi,
hab es jetzt doch so geschafft wie ich es wollte, muss ja in mehreren abfragen counten und in der jetzigen hats auch nach ein paar versuchen geklappt.
bei einer anderen abfrage muss ich noch genauer schaun, hab mich da sicher irgendwo vertan =)
aber im moment läufts gut :D
hehe, bin schon bissl fertig ...

mfg nauti
 
Hi,
um keinen neuen Thread zu erstellen benutz ich mal gleich meinen Alten, weil es auch ein solches Problem bzw. eine Frage ist.

Nun zum Thema:

Ich habe ein Abfrage erstellt, ...

PHP:
select m.id, m.nick, m.messenger, m.website, m.email, m.lastvisit, m.status, count (p.id) as posts
from members m join posts p using (nick)
group by m.id

... die mir auch die korrekten Ergebnisse bringt.

Weiters hab ich einen Table, mit Rängen zb.

PHP:
id, rank, postnum
9,  Keks,  250

Obiges Query liest mir die Postanzahl von dem jeweiligen User aus (das wären alle ) und ich hab jetzt vor dieses Resultat mit dem "Rank" Table irgendwie zu joinen und dann noch den korrekten Rang eines Users auszugeben.
D.h. ich müsste im Query rechnen, damit er mir den dazugehörigen Rangnamen zu den Posts ausgibt.
Nun die Frage: ist das in MySQL zu verwirklichen? Ohne Subselects werd ich hier nicht weit kommen schätze ich mal oder gibts da was bestimmtes?
Ansonsten muss ich das nicht direkt dem SQL server sagen, sondern dem, der so nett ist und mir PHP korrekt Parst :)

Schönen Abend,

nauti
 
Zurück