Hi DN, Boy SQL is damn powerful!!!
I see what you mean by having my head switch the way it is thinking and a lot of penny's dropped this afternoon, Thankyou. In the end I did this: SELECT studentname_27.objectives_id, studentname_27.data, staff.name, studentname_27.date, _objectives.name, _subjectHeadings.name, _subjects.name FROM studentname_27, _objectives, _subjectHeadings, _subjects, hinwick.staff WHERE studentname_27.objectives_id = _objectives.id AND _objectives.active = 'Y' AND _objectives.subjectHeadings_id = _subjectHeadings.id AND _subjectHeadings.active = 'Y' AND _objectives.subjects_id = _subjects.id AND _subjects.active = 'Y' AND staff.id = studentname_27.staff_id ORDER BY _subjects.displayOrder, _subjectHeadings.displayOrder, _objectives.displayOrder; Which nicely returned:- #+---------------+------------+----------------+----------------+-------- -----------------------+----------+-------------------------------------- --------+ #| objectives_id | data | name | date | name | name | name | #+---------------+------------+----------------+----------------+-------- -----------------------+----------+-------------------------------------- --------+ #| 1895 | 1:3 4;2:8; | A member of staff | 20020123121855 | Can Put on items of clothing: | DRESSING | Therapy and Care - Self Care and Health Care | #+---------------+------------+----------------+----------------+-------- -----------------------+----------+-------------------------------------- --------+ So there is no join is this sql statement, I say this cos I see no word saying JOIN? M. In message <1b4001c1a751$0e7988c0$7215100a@jrbrown>, DL Neil <[EMAIL PROTECTED]> writes >Hi Mark, > >> Can anyone tell me if this can be done in a single SQL statement? > >This sounds like solving the problem in procedural logic. Try putting >that aside and/or converting to relational >logic. As to the complexity of working with so many tables, its >realisation is startlingly simple once you >become familiar with the principles. > >This is quite a large/involved topic. If you are not familiar with SQL >and relational techniques then instead of >attempting to read it in an email msg, it would be better to check out >some of the introductory articles on the >various PHP-support sites (start with the links at PHP.net); or getting >hold of an introductory text book. > >Establish the linkage/relationship between each pair of tables using a 'join'. >Establish the sequence of the resultset by using the ORDER BY clause of >a SELECT statement. > >SELECT * > FROM _worsdallm > _objectives > _subjectHeadings > _subjects > WHERE _worsdall.objectives_id = _objectives.id > AND _objectives.active = Y > AND _objectives.subjectHeadings_id = _subjectHeadings.id > AND _subjectHeadings.active = Y > AND _objectives.subjects_id = _subjects.id > AND _subjects.active = Y > ORDER BY _subjects.displayOrder, > _subjectHeadings.displayOrder, > _objectives.displayOrder > >(without any testing, or any attempt at rationalisation or optimisation) > >Regards, >=dn > > >> Well I have this data stored in a table called _worsdallm which looks >> like this:- >> >> id int(10) NOT NULL auto_increment >> objectives_id int(10) >> data varchar(254) >> staff_id int(10) >> date timestamp NOT NULL >> PRIMARY KEY (id)) >> >> >> Now there will be lots of data in this table, objectives_id is the key >> column here as that refers to an entry in table _objectives which looks >> like this:- >> >> id >> subjects_id >> subjectHeadings_id >> name >> active >> displayOrder >> >> So _worsdall.objectives_id refers to _objectives.id, now we are not >> interested in this bit of data if _objectives.active != Y >> >> _subjectHeadings table looks like:- >> id >> subjects_id >> name >> active >> displayOrder >> >> and so _objectives.subjectHeadings_id refers to _subjectHeadings.id, now >> we are not interested in this subjectHeading if _subjectHeadings.active >> != Y >> >> _subjects table looks like:- >> id >> name >> active >> displayOrder >> >> and so _objectives.subjects_id refers to _subjects.id, now we are not >> interested in this subjects if _subjects.active != Y >> >> Assuming we are interested:-) here is the complex part (which I could do >> in code but want to see if I can do it SQL). >> >> I have to display the objectives recorded in the display order, i.e. by >> the column displayOrder which is in all three tables. >> >> Since the table _worsdallm has no idea of the order of things I would >> have to go through in code........ >> >> for subjects (ORDER BY displayOrder) if active >> >> for subjectHeadings (ORDER BY displayOrder) if active >> >> for objectives (ORDER BY displayOrder) if active >> >> does the objective exist in the table _worsdallm >> >> >> As you can see I can do it in code but I would be hitting the SQL server >> a lot more than necessary, since there are 2216 objectives and 450 >> Subject headings and 22 subjects and there may only be 22 records in >> _worsdallm. >> >> So how to construct an SQL statement to do it server friendly? >> >> All the records in _worsdallm will be used unless they fail the active >> tests for the objective they the record is AND they must be ordered by >> the following way:- >> >> >> subjects ORDER BY displayOrder >> subjectHeadings ORDER BY displayOrder >> objectives ORDER BY displayOrder > > -- Work:- postmasterAThinwick.demon.co.uk --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php