ugrás a tartalomhoz

Három adattábla összekapcsolása

tiku I tikaszvince · 2006. Júl. 25. (K), 14.23
Szaisztok!

MySQL-ben (4.1) szeretnék 3 táblát összekapcsolni.
Az első táblában vannak a kiírandó adatok,
CREATE TABLE  position (
  position_id int(10) unsigned NOT NULL auto_increment,
[...]
  PRIMARY KEY  (`position_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
a másik két táblából

CREATE TABLE  pos_check (
  user_id varchar(50) NOT NULL default '',
  position_id int(10) unsigned NOT NULL default '0',
  check_in datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (user_id,position_id),
  KEY FK_pos_pos (position_id),
  CONSTRAINT FK_pos_pos FOREIGN KEY (position_id) REFERENCES position (position_id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT FK_pos_user FOREIGN KEY (user_id) REFERENCES user (user_id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE  test (
  postest_id int(10) unsigned NOT NULL default '0',
  question_id int(10) unsigned NOT NULL default '1',
  PRIMARY KEY  (postest_id,question_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
valójában csak az adott rekordra vonatkozó sorok számát szeretném látni. (jelenleg a pos_check-ben 1, a test-ben 5 idevonatkozó sorom van). Minden jól működik, amíg a központi táblához csak egyik, vagy csak a másik táblát kapcsolom. Ha mindkettőből szeretném látni az adatot, akkor mindkettő COUNT 5-öt ad vissza.

Eddig erre jutottam:

SELECT
  p.position_id, p.job_id, p.skills, p.test_ok,
  COUNT(t.question_id) AS questin_num,
  COUNT(pc.user_id) AS checked_in
FROM
  pos_check pc 
  RIGHT JOIN position p USING (position_id)
  RIGHT JOIN test t ON p.position_id = t.postest_id
WHERE
  p.job_id = '2'
  AND filled IS NULL
GROUP BY p.position_id
Lehetséges azt kapjam eredménynek amit szeretnék? Én arra gyanakszom, hogy a táblák kapcsolásával lehet valami baj, de már összes kapcsolási sorrendet kipróbáltam...

Köszi
Tiku