On Monday 27 January 2003 01:51, Jim MacCormaic wrote:
> I'm currently developing a PHP/MySQL project, one aspect of which
> involves displaying a default set from the database which picks out all
> records for whichever individual is associated with the most recent
> date. I know this is a very general description, but I don't think it's
> necessary to burden list members with further detail, nor to pass on
> details of my table structures.
>
> Suffice it to say that I successfully achieved my goal with MySQL from
> the command line, but I'm not sure how to write this functionality into
> my PHP code.
>
> In MySQL, the following sequence of commands works the magic:
>
>       SELECT @most_recent:=MAX(date)
>               FROM presenters;
>
>       SELECT @recent_presenter:=presenter
>               FROM presenters
>               WHERE date = @most_recent;
>
>       SELECT p.date, p.theme, p.presenter,
>               c.itemNo, c.composer, c.composition, c.note
>               FROM presenters p, compositions c
>               WHERE p.date = c.date AND p.presenter = @recent_presenter
>               ORDER BY p.date DESC;
>
> So how do I transfer all this to PHP?
>
> I've tried a number of approaches:
>
> 1.    $presenterQuery = "
>               SELECT @most_recent:=MAX(date) from presenters;
>               SELECT @recent_presenter:=presenter
>                       FROM presenters WHERE date=@most_recent;
>               SELECT date_format(p.date, '%d/%m/%y') AS readable_date, p.theme,
> p.presenter,
>                       c.itemNo, c.composer, c.composition, c.note
>                       FROM presenters p, compositions c
>                       WHERE p.date = c.date AND p.presenter = @recent_presenter
>                       ORDER BY p.date DESC";

The php-mysql interface doesn't support multiple queries in a single operation 
so you can forget this approach.

> 2.    $tempQuery1 = "
>               SELECT @most_recent:=MAX(date) from presenters";
>       $tempQuery2 = "
>               SELECT @recent_presenter:=presenter FROM presenters WHERE
> date=@most_recent;
>       $presenterQuery = "
>               SELECT date_format(p.date, '%d/%m/%y') AS readable_date, p.theme,
> p.presenter,
>               c.itemNo, c.composer, c.composition, c.note
>               FROM presenters p, compositions c
>               WHERE p.date = c.date AND p.presenter = @recent_presenter
>               ORDER BY p.date DESC";

You're not doing anything with $tempQuery1 & $tempQuery2 this is complete 
nonsense ;-)

> 3.    $tempQuery1 = "
>               SELECT @most_recent:=MAX(date) from presenters";
>               $tempQuery1Result = mysql_db_query($database, $tempQuery1,
> $connection) or die ( mysql_error() );
>       $tempQuery2 = "
>               SELECT @recent_presenter:=presenter FROM presenters WHERE date =
> \"$tempQuery1Result\"";
>               $tempQuery2Result = mysql_db_query($database, $tempQuery2,
> $connection) or die ( mysql_error() );
>       $presenterQuery = "
>               SELECT date_format(p.date, '%d/%m/%y') AS readable_date, p.theme,
> p.presenter,
>               c.itemNo, c.composer, c.composition, c.note
>               FROM presenters p, compositions c
>               WHERE p.date = c.date AND p.presenter = \"$tempQuery2Result\"
>               ORDER BY p.date DESC";

This is getting closer. Unfortunately you haven't been reading the manual. 
mysql_query() returns a "resource ID". See examples in manual for details on 
how to properly query and return results from a db.

Looking at your queries, it seems that you're doing more steps than is 
strictly required.
  
        SELECT @most_recent:=MAX(date)
                FROM presenters;

        SELECT @recent_presenter:=presenter
                FROM presenters
                WHERE date = @most_recent;

Couldn't the above be condensed to:

  SELECT presenter FROM presenters ORDER BY date DESC LIMIT 1;

Which means you can get by with 2 queries:

  $query = "SELECT presenter FROM presenters ORDER BY date DESC LIMIT 1";
  $result = mysql_query($query);
  $row = mysql_fetch_assoc($result);
  $presenter = $row['presenter'];

You can now use $presenter in your last query:

  $presenterQuery = "SELECT p.date, p.theme, p.presenter,
                            c.itemNo, c.composer, c.composition, c.note
                       FROM presenters p, compositions c
                      WHERE p.date = c.date AND p.presenter = $presenter
                   ORDER BY p.date DESC";

>       $presenterResult = mysql_db_query($database, $presenterQuery,
> $connection) or die ( mysql_error() );

All code untested, handle with care.

-- 
Jason Wong -> Gremlins Associates -> www.gremlins.biz
Open Source Software Systems Integrators
* Web Design & Hosting * Internet & Intranet Applications Development *

/*
If we won't stand together, we don't stand a chance.
*/


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to