Hans,
On 2/4/02 6:30 PM, "[EMAIL PROTECTED]"
<[EMAIL PROTECTED]> wrote:
> From: hz11 <[EMAIL PROTECTED]>
> Date: Mon, 04 Feb 2002 21:17:15 -0500
> To: [EMAIL PROTECTED]
> Subject: Dealing with One-to-Many SELECTS (MySQL)
>
>
>....
> to get a single event. This all works fine, however this is the result
> set I get back:
>
> 45 48 1012359206 1012134660 1 Jan
> 45 48 1012359206 1012134660 2 27
> 45 48 1012359206 1012134660 61 07
> 45 48 1012359206 1012134660 39 31
> 45 48 1012359206 1012134660 5 00
> 45 48 1012359206 1012134660 6 ahost
> 45 48 1012359206 1012134660 69 14823
> 45 48 1012359206 1012134660 10 my.host.com
>
> My question is there any way to consolidate the rows, so that I avoid
> the redundant data?
According to the DBMS there is no redundant data in the above results set.
Yes we see the first 4 columns are identical but because the last two are
not the same the set contains no duplicate rows (commands like "DISTINCT and
GROUOP BY will not do what you wish).
> In other words:
>
> 45 48 1012359206 1012134660 1 Jan 2 27 61 07 39 31 5 00 6 ahost 69 14823
> 10 my.host.com
This cannot be done with a single select statement - SQL results are very
square (think excel spread sheet) every row will have every column and you
cannot have a single row / column with distinct values from multiple rows.
Even if you're talking about aggregate functions (average, count, min, max)
these aren't distinct values.
> I could do this in multiple queries,
That's the way I'd do it.
> which works fine when there is only
> one event returned, but if I query on a different field (event.tid for
> example, which is a type of line) things get very messy.
Try opening two DB connections - you've got one working already
$res1 has the result of
SELECT event.eid, event.tid, event.itimestamp, event.etimestamp
FROM event
WHERE event.eid='45' (I've left out the join and date table)
/* I'll assume ODBC but it works for any type */
While(odbc_fetch_row($res1))
{
$eid = odbc_result($res1,1);
/* Print or whatever you want to do with */
/* event.eid, event.tid, event.itimestamp, event.etimestam */
$sql2 = "SELECT data.did,data.data
FROM event LEFT JOIN line ON event.eid=line.eid
LEFT JOIN data ON line.did=data.did
WHERE event.eid=/"$my_eid/";
$res2 = odbc_exec($con2,$sql2);
While(odbc_fetch_row($res2))
{
/* now fetch and do what you want with the date.did and data */
$did = odbc_result($res2,1);
$data = odbc_result($res2,2);
}
}
Not so messy, No?
Good Luck,
Frank
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php