Datenbank auslesen mit GROUP BY - funktioniert nicht

ich würds mal so versuchen:
Nur nach tutor_id gruppieren und ne Having- statt ner Where-klausel:

PHP:
$query = "SELECT  ks_tl_meet.tutor_id, ks_user.username  FROM ks_tl_meet 
                    INNER JOIN  ks_user ON ks_tl_meet.tutor_id = ks_user.pid 
                    INNER JOIN  ks_tl ON ks_tl_meet.tl_id = ks_tl.kurs_id
                   GROUP BY ks_tl_meet.tutor_id
                   HAVING ks_tl_meet.tutor_gehalt = '1'
          ";

grüsse, tecla
 
da sagt er mir dann folgende Sache:

HTML:
SELECT ks_tl_meet.tutor_id, ks_user.username FROM ks_tl_meet INNER JOIN ks_user ON ks_tl_meet.tutor_id = ks_user.pid INNER JOIN ks_tl ON ks_tl_meet.tl_id = ks_tl.kurs_id GROUP BY ks_tl_meet.tutor_id HAVING tutor_gehalt = '1' 

Unknown column 'tutor_gehalt' in 'having clause'

warum das denn nun? Die gibts doch!

Und als Ergebnis kommt gar nichts mehr raus (wenn ich den fehler unterdrücke)
 
Hallo,

die Having-Klausel verwendet man bei einem gruppierten Feld, aber nach tutor_gehalt wird nicht gruppiert, also benutzt man hier die Where-Klausel.
 
wie meinst du das mit dem Dump? willst du die zellen-struktur?
hier nochmal 3 screenshots dazu:

ks_user: //entfernt
ks_tl: //entfernt
ks_tl_meet: //entfernt


danke euch beiden für die lange Hilfe - wir schaffen das! :) yes, we cannnnnnn
 
Zuletzt bearbeitet:
wenn ich das dann nicht falsch verstanden habe, dann wollt ihr das hier:

Code:
-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 08. April 2009 um 18:27
-- Server Version: 5.1.30
-- PHP-Version: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `ks_tl`
--

CREATE TABLE IF NOT EXISTS `ks_tl` (
  `kurs_id` int(11) NOT NULL AUTO_INCREMENT,
  `tutor_id` tinyint(3) NOT NULL COMMENT 'tutor_id',
  `thema` varchar(50) CHARACTER SET latin1 NOT NULL,
  `beschreibung` mediumtext CHARACTER SET latin1 NOT NULL,
  `kategorie_id` tinyint(3) NOT NULL,
  `time` char(25) COLLATE latin1_general_ci NOT NULL COMMENT 'datum+uhrzeit in timestamp',
  `datum` date NOT NULL COMMENT 'einzelnes Datum, lesbar',
  `monat` tinyint(2) NOT NULL COMMENT 'monat des kurses - bessere kalender-auslese!',
  `tag` tinyint(2) NOT NULL COMMENT 'tag des kurses - bessere kalender-auslese',
  `zeit_start` time NOT NULL COMMENT 'Uhrzeit, lesbar',
  `dauer` mediumint(3) NOT NULL COMMENT 'dauer (min) lesbar',
  `buchung` int(1) DEFAULT '0' COMMENT '0=nicht gebucht, 1=gebucht',
  `preis` decimal(2,0) NOT NULL,
  `tutor_gehalt` int(3) DEFAULT '0',
  `create_datum` date NOT NULL COMMENT 'Datum, an dem der Kurs angelegt wurde',
  `tl_bewertung` tinyint(1) NOT NULL COMMENT 'Schulnote 1 bis 6 zur BWertung der TL nach Abschluss durch User',
  PRIMARY KEY (`kurs_id`),
  KEY `id` (`kurs_id`,`kategorie_id`,`thema`,`tutor_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ROW_FORMAT=DYNAMIC COMMENT='Liste der TeachingLessons' AUTO_INCREMENT=8 ;

--
-- Daten für Tabelle `ks_tl`
--

INSERT INTO `ks_tl` (`kurs_id`, `tutor_id`, `thema`, `beschreibung`, `kategorie_id`, `time`, `datum`, `monat`, `tag`, `zeit_start`, `dauer`, `buchung`, `preis`, `tutor_gehalt`, `create_datum`, `tl_bewertung`) VALUES
(1, 2, 'Testthema 1', 'dies ist ein testthema mit viel  text aber wenig inhalt, denn ich will testen, wie lange ich hier zeugz eingeben kann ohne dass er es abbricht oder meckern anfängt. nach spät. 250 zeichen sollte eigentlich schluss sein eine normale sms nachricht ist 140 d.h man hat 100 zeichen mehr aber irgendwie funktioniert das hier nicht.', 3, '1240036200', '2009-04-18', 4, 18, '08:30:00', 45, 0, 20, 15, '2009-03-31', 0),
(2, 3, 'Testkurs 2', 'testkurs text 123 wie sieht das aus?', 1, '1238730300', '2009-04-03', 4, 3, '05:45:00', 45, 1, 20, 15, '2009-04-01', 0),
(3, 3, 'test', 'testkurs', 2, '1240044300', '2009-04-18', 4, 18, '10:45:00', 135, 1, 60, 45, '2009-04-02', 0),
(5, 3, 'testkurs', 'eins zwei drei', 1, '1238859000', '2009-04-04', 4, 4, '17:30:00', 90, 1, 40, 30, '2009-04-02', 0),
(6, 3, 'Notfallmedizin allgemein', 'eine allg. Einführung in die Notfallmedizin, speziell für Neulinge geeignet', 3, '1239557400', '2009-04-12', 4, 12, '19:30:00', 90, 1, 40, 30, '2009-04-05', 0),
(7, 3, 'test vergangen', 'dieser kurs ist längst vergangen', 1, '1233854100', '2009-02-05', 2, 5, '18:15:00', 90, 0, 40, 30, '2009-04-05', 0);

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `ks_tl_meet`
--

CREATE TABLE IF NOT EXISTS `ks_tl_meet` (
  `id` tinyint(5) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(5) NOT NULL,
  `tutor_id` int(4) NOT NULL COMMENT 'id des Tutors, der Kurs anbietet',
  `tl_id` tinyint(5) NOT NULL,
  `buchungsdatum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Tag/Uhrzeit, an der User TL gebucht hat',
  `code` text NOT NULL,
  `modus` tinyint(1) NOT NULL COMMENT 'von user gewünscht: 1=webcam, 2=nur audio, 3=nur text',
  `tutor_gehalt` int(1) NOT NULL DEFAULT '0' COMMENT '0=nicht bezahlt, 1=von userkonto abgebucht (verwaltung muss bestätigen), ,2=tutor bezahlt von verwaltung bestätigt',
  `user_abgebucht` date NOT NULL COMMENT 'wann wurde Preis von Userkonto abgebucht (bestätigt)?',
  `tutor_bezahlt` date NOT NULL COMMENT 'wann wurde Überweisung von Gehalt für Tutor als überwiesen bestätigt?',
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='TeachingLessons mit Userbuchung' AUTO_INCREMENT=5 ;

--
-- Daten für Tabelle `ks_tl_meet`
--

INSERT INTO `ks_tl_meet` (`id`, `user_id`, `tutor_id`, `tl_id`, `buchungsdatum`, `code`, `modus`, `tutor_gehalt`, `user_abgebucht`, `tutor_bezahlt`) VALUES
(1, 2, 3, 5, '2009-04-02 22:04:19', 'gnpJK-2ste-3tut-5', 1, 1, '2009-04-05', '0000-00-00'),
(2, 2, 3, 3, '2009-04-02 22:05:06', 'qVKry-2ste-3tut-3', 1, 0, '0000-00-00', '0000-00-00'),
(3, 2, 7, 2, '2009-04-02 22:06:51', 'GtNks-2ste-3tut-2', 1, 1, '2009-04-05', '0000-00-00'),
(4, 2, 3, 6, '2009-04-05 10:06:58', '6nehB-2ste-3tut-6', 1, 0, '0000-00-00', '0000-00-00');

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `ks_user`
--

CREATE TABLE IF NOT EXISTS `ks_user` (
  `pid` tinyint(5) NOT NULL AUTO_INCREMENT,
  `active` tinyint(1) DEFAULT '1' COMMENT '1=active, 0=inactive',
  `activated_mail` tinyint(1) DEFAULT NULL COMMENT '0= inactived, 1=activated_user, 2=activated_verwaltung (nur bei Tutor nötig)',
  `usertype` int(1) NOT NULL COMMENT '1=user, 2=tutor, 3=verwaltung, 4=admin',
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `name` varchar(20) NOT NULL,
  `vname` varchar(20) NOT NULL,
  `mail_private` varchar(50) NOT NULL COMMENT 'mail zur Kontaktaufnahme fürs System',
  `mail_public` varchar(30) NOT NULL COMMENT 'mail, die anderen usern mitgeteilt wird',
  `mail_type` tinyint(1) NOT NULL COMMENT '1=html, 2=nur text',
  `newsletter` tinyint(4) DEFAULT NULL COMMENT '0=nein, 1=ja',
  `beruf` varchar(20) DEFAULT NULL COMMENT 'heilpraktiker, schüler....',
  `regdate` date NOT NULL,
  `lastlogin` date NOT NULL,
  `adresse` mediumtext NOT NULL COMMENT 'als array speichern, Str~Nr~PLZ~Ort',
  `skype` varchar(20) NOT NULL,
  `activation_code` text NOT NULL COMMENT 'einzigartiger Code, der per Mail an User zur Aktivierung geschickt wird',
  `kontoinhaber` text NOT NULL,
  `kontonummer` varchar(15) NOT NULL,
  `blz` int(12) NOT NULL,
  `bank` varchar(50) NOT NULL,
  `tut:_bewertung` varchar(20) NOT NULL COMMENT 'positiv~negativ',
  UNIQUE KEY `id_2` (`pid`,`username`,`mail_private`,`mail_public`,`skype`),
  KEY `id` (`pid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC COMMENT='User-Stammdaten' AUTO_INCREMENT=8 ;

--
-- Daten für Tabelle `ks_user`
--
//entfernt

das sind die drei Tabellen in der DB - via Export rausgezogen. So richtig? ;)

danke danke danke!
 
Zuletzt bearbeitet:
also, folgende Abfrage funktioniert bei mir wunderbar:

PHP:
SELECT * FROM ks_tl_meet, ks_user, ks_tl
WHERE ks_tl_meet.tutor_id = ks_user.pid
AND ks_tl_meet.tl_id = ks_tl.kurs_id
AND ks_tl_meet.tutor_gehalt = '1'
GROUP BY ks_tl_meet.tutor_id

Mit der Spalte Time müsste man jetzt noch ein bisschen rumpröbeln. Ich denke auch, dass es an der liegt.

Grüsse, tecla
 
Zurück