UNION
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?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>';
?>
$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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
)
)
)
(
[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
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? $sql = "(
SELECT
COUNT(id) AS Bezoekers
FROM
online
WHERE
mid = 0
)
UNION
(
SELECT
COUNT(id) AS Bezoekers
FROM
online
WHERE
mid <> 0
)";
?>
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?
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
http://bbczedelgem.be/login/bezoekersonline.php
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?)
Deze query heb ik nu en is te bekijken op Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[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
)
)
(
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?)
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
Hipska:
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?
FROM tabel
GROUP BY mid
elke bij elk lid komt er dan een aparte rij van aantal : 1