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

Reply via email to