ik 3 query's: query1, query2 en query3. query3 is de UNION van q1 & q2 maar die werkt niet zoals ik denk dat hij zou moeten werken. (hij toont nl. niet de waarden vanuit q2)
<?php
$query[1] = "
SELECT
COUNT(id) AS bezoekers
FROM
online
WHERE
mid = 0";

$query[2] = "
SELECT
COUNT(id) AS Leden
FROM
online
WHERE
mid <> 0";

$query[3] = "
(
SELECT
COUNT(id) AS Bezoekers
FROM
online
WHERE
mid = 0
)
UNION
(
SELECT
COUNT(id) AS Leden
FROM
online
WHERE
mid <> 0
)";

$sql = array();

foreach ($query as $k => $v) {
$sql[$k]['<b>SQL</b>'] = '<b>'.$v.'</b>';
$res = mysql_query($v);
$sql[$k]['<b>ROWS</b>'] = '<b>'.mysql_num_rows($res).'</b>';
$r = 0;
while($row = mysql_fetch_assoc($res)){
$r++;
foreach ($row as $rk => $rv) {
if(!empty($rv) or is_numeric($rv)){
$sql[$k][$r]['<b>'.$rk.'</b>'] = '<b>'.$rv.'</b>';
}
}
}
if(mysql_error()){
$sql[$k]['<b>ERROR</b>'] = mysql_error();
}
}

echo = '<pre>'.print_r($sql, true).'</pre>';
?>
Dit komt er dan uit:

Array
(
    [1] => Array
        (
            [SQL] => 
SELECT 
	COUNT(id) AS bezoekers 
FROM 
	online 
WHERE 
	mid = 0
            [ROWS] => 1
            [1] => Array
                (
                    [bezoekers] => 1
                )

        )

    [2] => Array
        (
            [SQL] => 
	SELECT 
		COUNT(id) AS Leden 
	FROM 
		online 
	WHERE 
		mid <> 0
            [ROWS] => 1
            [1] => Array
                (
                    [Leden] => 1
                )

        )

    [3] => Array
        (
            [SQL] => 
(
	SELECT 
		COUNT(id) AS Bezoekers 
	FROM 
		online 
	WHERE 
		mid = 0
)
UNION
(
	SELECT 
		COUNT(id) AS Leden 
	FROM 
		online 
	WHERE 
		mid <> 0
)
            [ROWS] => 1
            [1] => Array
                (
                    [Bezoekers] => 1
                )

        )

)

dit hier zou bij de laatse query Bezoekers en Leden moeten geven toch?
zie live de results op deze pagina
Ik zeg het uit mijn hoofd, maar volgens mij moeten bij een UNION de velden die je per query opvraagt, gelijk zijn. Bij jou is query 2 anders.
Inderdaad. Je kunt niet "Leden" gebruiken in Query 1 en "Bezoekers" in Query 2.
ik hebruik nu dit:
<? $sql = "(
SELECT
COUNT(id) AS Bezoekers
FROM
online
WHERE
mid = 0
)
UNION
(
SELECT
COUNT(id) AS Bezoekers
FROM
online
WHERE
mid <> 0
)";
?>
nu, heeft hij 2 rijen met 'Bezoekers' 1e rij zijn de bezoekers en de 2de rij zijn de Leden.

MAAR, dit doet hij enkel als de 2 waarden verschillend zijn, indien er evenveel bezoekers als leden zijn komt er maar 1 rij uit deze query.

is er misschien een andere mogelijkheid om dit te bereiken?
Deze query heb ik nu en is te bekijken op http://bbczedelgem.be/login/bezoekersonline.php

            [SQL] => 
(
	SELECT COUNT(id) AS Aantal FROM online WHERE mid = 0
) UNION (
	SELECT COUNT(id) AS Aantal FROM online WHERE mid <> 0
) UNION (
	SELECT COUNT(id) AS Aantal FROM online
)
            [ROWS] => 3
            [RIJ 1] => Array
                (
                    [Aantal] => 4
                )

            [RIJ 2] => Array
                (
                    [Aantal] => 1
                )

            [RIJ 3] => Array
                (
                    [Aantal] => 5
                )

        )


Het probleem is, als er evenveel leden zijn als bezoekers, dan gaat hij de mist in...
hij toont dan maar 2 rijen. idem als er geen gasten zijn of geen leden zijn.

is er een mogelijkheid deze 3 waarden op te vragen uit de database in 1 query en zonder UNION? (of nog een andere oplossing?)
Hipska schreef op 17.09.2006 18:40
ik gebruik nu dit:
<? $sql = "(
SELECT
COUNT(id) AS Bezoekers
FROM
online
WHERE
mid = 0
)
UNION
(
SELECT
COUNT(id) AS Bezoekers
FROM
online
WHERE
mid <> 0
)";
?>

Dat is natuurlijk een gekke union. Je verenigt de records waarbij mid gelijk is aan 0 met de records waarbij mid ongelijk is aan 0. Kortom; je pakt alle records. Daar heb je echt geen UNION voor nodig.
hoe kan ik dan weten hoeveel leden (mid!=0) en hoeveel gasten (mid==0) er zijn?
Dat gaat niet in 1 query. Maak er gewoon twee, zoveel tijd zal dat niet kosten.
spijtig maarjah, iemand anders mischien een ideetje?
SELECT COUNT(mid) AS aantal
FROM tabel
GROUP BY mid
nee, gaat ook niet,

elke bij elk lid komt er dan een aparte rij van aantal : 1

Reageren