Mike Blezien <[EMAIL PROTECTED]> wrote on 10/04/2005 10:08:24 AM: > Hello, > > > [EMAIL PROTECTED] wrote: > > Mike Blezien <[EMAIL PROTECTED]> wrote on 10/04/2005 08:34:56 AM: > > > > > >>Hello, > >> > >>I am trying to put together a single query from across 4 tables and > >>not having a > >>problem getting the results needed. table structure: > >>###################################################### > >>CREATE TABLE IF NOT EXISTS job_posts ( > >> jobid int(6) unsigned NOT NULL auto_increment, > >> job_vacancy mediumtext NOT NULL, > >> job_information mediumtext NOT NULL, > >> job_procedure mediumtext NOT NULL, > >> job_posttime varchar(10) NOT NULL default '', > >> PRIMARY KEY (jobid) > >>) TYPE=InnoDB; > >> > >>CREATE TABLE IF NOT EXISTS school_job ( > >> jobid int(6) unsigned NOT NULL default '0', > >> schoolid int(6) unsigned NOT NULL default '0', > >> KEY jobid (jobid,schoolid) > >>) TYPE=InnoDB; > >> > >>CREATE TABLE IF NOT EXISTS school_region ( > >> accountid int(6) unsigned NOT NULL default '0', # equal as schoolid > >> region_id tinyint(2) unsigned NOT NULL default '0', > >> country char(2) NOT NULL default '', > >> PRIMARY KEY (accountid), > >> KEY region_id (region_id) > >>) TYPE=InnoDB; > >> > >>CREATE TABLE IF NOT EXISTS school_access ( > >> accountid int(6) unsigned NOT NULL auto_increment, # equal to > > > > schoolid > > > >> groupid enum('sc_school','sc_user','sc_admin') NOT NULL default > >>'sc_school', > >> username varchar(40) binary NOT NULL default '', > >> password varchar(20) NOT NULL default '', > >> status enum('active','pending','expired','pending_paid') NOT NULL > > > > default > > > >>'pending', > >> acctdays smallint(4) NOT NULL default '0', > >> regdate date NOT NULL default '0000-00-00', > >> PRIMARY KEY (accountid), > >> KEY username (username,status,acctdays) > >>) TYPE=InnoDB; > >>##########################################################3 > >> > >>what we need to obtain in the query are the following. > >>all data from `job_posts', schoolid from `school_job`, country from > >>`school_region` where `school_access` status = 'active' > >> > >>the `school_job` and `school_access` tables are also used to tie(join)
> > > > too a > > > >>`school_profile` table(all personal data) > >> > >>any help with optimizing a single query would be appreciated. > >> > > > > > > > I can't see (based on your column names) how to associate one row from > > job_posts to any other row(s) in either school_region or school_access. > > Did you leave out a table definition (or two)? I can go through school_job > > to get at the schoolid but I still cannot relate to either of those > > tables. I need some way of matching either jobid to accountid or schoolid > > to accountid. > > > > I have to have some way of tying those four tables together in order to > > build your query. > > > > Shawn Green > > Database Administrator > > Unimin Corporation - Spruce Pine > > > > > the `school_job` table should tie them together, the jobid and schoolid would > tie them together in the `job_posts` table, the schoolid(in the `school_job` > table), would be the same value as the accountid in the `school_access` and > `school_region` tables, just assigned a different column name for > other reasons. > > by the way, this is MySQL Ver., 3.23.58 which I can not upgrade either > > Hope this helps. :) It certainly does SELECT jp.* , sj.schoolid , sr.country FROM job_posts jp INNER JOIN school_job sj ON sj.jobid = jp.jobid INNER JOIN school_access sa ON sa.accountid = sj.schoolid LEFT JOIN school_region sr ON sj.schoolid = sr.accountid WHERE sa.status = 'active'; That will list every job in any school (whether it has a region or not) where the status is 'active'. Does this answer your needs? Shawn Green Database Administrator Unimin Corporation - Spruce Pine