Searching Multiple Tables

Searching Multiple Tables

am 07.08.2007 16:08:29 von mylek

I am trying to create a search system for an existing database.
Because of the way the database is setup, I need to traverse three
different tables, gathering information:

1) Go into table1 and lookup show_id by show name. (For instance,
let's say I am looking for the Mickey Mouse show. I look it up and
find that it's show_id is 6)

2) Go into table2 and lookup all attendee_ids for show_id 6. (For
instance, I lookup show_id 6 and find 5 attendees. 1, 2, 3, 4 and 5
are the attendee_id's)

3) Go into table3 and lookup attendee names, from the 5 attendee_ids.
(For instance, I lookup 1, 2, 3, 4 and 5 to find their names are Jane,
Alice, Tom, Peter and Greg.)

I am not free to adjust the tables, so I have to stick with what is
there. There may be an SQL statement that could do all this in one
command, but I am no SQL expert. I was wondering if anyone had some
PHP oriented solutions. I can get the show_id, no problem. I seem to
be having a problem with the rest, as it involves arrays. After I go
into table2 and get all the attendee_ids, I get an array of
attendee_ids that I need to search table3 for, to create a new array
of attendee names.

Re: Searching Multiple Tables

am 07.08.2007 16:26:36 von Boris Stumm

Jerim79 wrote:

> I am trying to create a search system for an existing database.
> Because of the way the database is setup, I need to traverse three
> different tables, gathering information:
>
> 1) Go into table1 and lookup show_id by show name. (For instance,
> let's say I am looking for the Mickey Mouse show. I look it up and
> find that it's show_id is 6)
>
> 2) Go into table2 and lookup all attendee_ids for show_id 6. (For
> instance, I lookup show_id 6 and find 5 attendees. 1, 2, 3, 4 and 5
> are the attendee_id's)
>
> 3) Go into table3 and lookup attendee names, from the 5 attendee_ids.
> (For instance, I lookup 1, 2, 3, 4 and 5 to find their names are Jane,
> Alice, Tom, Peter and Greg.)
>
> I am not free to adjust the tables, so I have to stick with what is
> there. There may be an SQL statement that could do all this in one
> command, but I am no SQL expert.

select
table3.attendee_name
from
table1, table2, table3
where
table1.show_name = 'Mickey Mouse' and
table1.show_id = table2.show_id and
table2.attendee_id = table3.attendee_id

Note that the default String enclosing characters in MySQL are not
standard, i.e., not '', so you have to change that.

Re: Searching Multiple Tables

am 07.08.2007 16:30:05 von Erwin Moller

Jerim79 wrote:
> I am trying to create a search system for an existing database.
> Because of the way the database is setup, I need to traverse three
> different tables, gathering information:
>
> 1) Go into table1 and lookup show_id by show name. (For instance,
> let's say I am looking for the Mickey Mouse show. I look it up and
> find that it's show_id is 6)
>
> 2) Go into table2 and lookup all attendee_ids for show_id 6. (For
> instance, I lookup show_id 6 and find 5 attendees. 1, 2, 3, 4 and 5
> are the attendee_id's)
>
> 3) Go into table3 and lookup attendee names, from the 5 attendee_ids.
> (For instance, I lookup 1, 2, 3, 4 and 5 to find their names are Jane,
> Alice, Tom, Peter and Greg.)
>
> I am not free to adjust the tables, so I have to stick with what is
> there.

Hi,

So far it sounds like a nice denormalized database.
Please don't 'adjust' it. ;-)
I think your database is designed just fine (based on what you told).

There may be an SQL statement that could do all this in one
> command, but I am no SQL expert.

Yes, that is easy done in one SQL statement that joins the 3 tables.

I was wondering if anyone had some
> PHP oriented solutions. I can get the show_id, no problem. I seem to
> be having a problem with the rest, as it involves arrays. After I go
> into table2 and get all the attendee_ids, I get an array of
> attendee_ids that I need to search table3 for, to create a new array
> of attendee names.

Don't.
Write a single query that joins the 3 tables and let the database do the
hard work.

You might want to throw in the 3 relevant tables (how they are
structured) if you want us to make the join.
(Or better, repost that to a databasenewsgroup)

Good luck.

Regards,
Erwin Moller

Re: Searching Multiple Tables

am 07.08.2007 16:30:59 von Erwin Moller

Jerim79 wrote:
> I am trying to create a search system for an existing database.
> Because of the way the database is setup, I need to traverse three
> different tables, gathering information:
>
> 1) Go into table1 and lookup show_id by show name. (For instance,
> let's say I am looking for the Mickey Mouse show. I look it up and
> find that it's show_id is 6)
>
> 2) Go into table2 and lookup all attendee_ids for show_id 6. (For
> instance, I lookup show_id 6 and find 5 attendees. 1, 2, 3, 4 and 5
> are the attendee_id's)
>
> 3) Go into table3 and lookup attendee names, from the 5 attendee_ids.
> (For instance, I lookup 1, 2, 3, 4 and 5 to find their names are Jane,
> Alice, Tom, Peter and Greg.)
>
> I am not free to adjust the tables, so I have to stick with what is
> there.

Hi,

So far it sounds like a nice normalized database.
Please don't 'adjust' it. ;-)
I think your database is designed just fine (based on what you told).

There may be an SQL statement that could do all this in one
> command, but I am no SQL expert.

Yes, that is easy done in one SQL statement that joins the 3 tables.

I was wondering if anyone had some
> PHP oriented solutions. I can get the show_id, no problem. I seem to
> be having a problem with the rest, as it involves arrays. After I go
> into table2 and get all the attendee_ids, I get an array of
> attendee_ids that I need to search table3 for, to create a new array
> of attendee names.

Don't.
Write a single query that joins the 3 tables and let the database do the
hard work.

You might want to throw in the 3 relevant tables (how they are
structured) if you want us to make the join.
(Or better, repost that to a databasenewsgroup)

Good luck.

Regards,
Erwin Moller

Re: Searching Multiple Tables

am 07.08.2007 16:37:36 von gentleJuggernaut

On Aug 7, 10:08 am, Jerim79 wrote:
> I am trying to create a search system for an existing database.
> Because of the way the database is setup, I need to traverse three
> different tables, gathering information:
>
> 1) Go into table1 and lookup show_id by show name. (For instance,
> let's say I am looking for the Mickey Mouse show. I look it up and
> find that it's show_id is 6)
>
> 2) Go into table2 and lookup all attendee_ids for show_id 6. (For
> instance, I lookup show_id 6 and find 5 attendees. 1, 2, 3, 4 and 5
> are the attendee_id's)
>
> 3) Go into table3 and lookup attendee names, from the 5 attendee_ids.
> (For instance, I lookup 1, 2, 3, 4 and 5 to find their names are Jane,
> Alice, Tom, Peter and Greg.)
>
> I am not free to adjust the tables, so I have to stick with what is
> there. There may be an SQL statement that could do all this in one
> command, but I am no SQL expert. I was wondering if anyone had some
> PHP oriented solutions. I can get the show_id, no problem. I seem to
> be having a problem with the rest, as it involves arrays. After I go
> into table2 and get all the attendee_ids, I get an array of
> attendee_ids that I need to search table3 for, to create a new array
> of attendee names.


$row_rsIDAttend = mysql_fetch_assoc($result_from_atendee_id_sql); //
result from sql request of tbl2


do {

$qry_rsAttendee = "SELECT name FROM table3 WHERE id = " .
$row_rsAttendee['attendee_id']; //sql tbl3
$result = mysql_query($qry_rsAttendee); // run query
$row_rsAttendee = mysql_fetch_assoc($result); //fetch the first/next
array of field data
$array_attendee_names[] = $row_rsAttendee['name']; //fill your data
array of names

}while ($row_rsIDAttend =
mysql_fetch_assoc($result_from_atendee_id_sql));


I wrote this out pretty quick, so check over my syntax, but this
should do what you want.
once the do loop is finished you will have an array
($array_attendee_names[]) with the number of elements in it that
represent your attendee list. Each individual element (attendee name)
can be accessed by refering to an element in the array
($array_attendee_names[1]). The elements start at 0. so if there are
5 attendees they will be numbered 0-4. If you want to show the 3rd
attendee in the list do this:

echo $array_attendee_names[2];

check out this for more on arrays:

http://us2.php.net/manual/en/language.types.array.php - basic array
use info

http://us2.php.net/manual/en/ref.array.php - array functions

GJ

Re: Searching Multiple Tables

am 07.08.2007 17:05:17 von mylek

On Aug 7, 9:26 am, Boris Stumm wrote:
> Jerim79 wrote:
> > I am trying to create a search system for an existing database.
> > Because of the way the database is setup, I need to traverse three
> > different tables, gathering information:
>
> > 1) Go into table1 and lookup show_id by show name. (For instance,
> > let's say I am looking for the Mickey Mouse show. I look it up and
> > find that it's show_id is 6)
>
> > 2) Go into table2 and lookup all attendee_ids for show_id 6. (For
> > instance, I lookup show_id 6 and find 5 attendees. 1, 2, 3, 4 and 5
> > are the attendee_id's)
>
> > 3) Go into table3 and lookup attendee names, from the 5 attendee_ids.
> > (For instance, I lookup 1, 2, 3, 4 and 5 to find their names are Jane,
> > Alice, Tom, Peter and Greg.)
>
> > I am not free to adjust the tables, so I have to stick with what is
> > there. There may be an SQL statement that could do all this in one
> > command, but I am no SQL expert.
>
> select
> table3.attendee_name
> from
> table1, table2, table3
> where
> table1.show_name = 'Mickey Mouse' and
> table1.show_id = table2.show_id and
> table2.attendee_id = table3.attendee_id
>
> Note that the default String enclosing characters in MySQL are not
> standard, i.e., not '', so you have to change that.

That worked like a charm. Thank you very much. I took SQL back in
college, and use it from time to time, but never really have a need
for it 90% of the time. Your example immediately made sense.