SELECT alle data en toon geselecteerde
Om een lang verhaal kort te maken. Ik wil graag $sql1 en $sql2 uit onderstaand script samenvoegen:
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
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
<?php
$sql1 = "SELECT
id,
naam
FROM
optredens";
$sql2 = "SELECT
optredenid
FROM
gebeurtenissen
WHERE
gebeurtenissen.id = :gebeurtenisid";
$stmt = $db->prepare($sql2);
$stmt->bindParam(':gebeurtenisid', ifset($_GET['gebeurtenisid']), PDO::PARAM_INT);
$stmt->execute();
$result2 = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<select name="soortoptreden" id="soortoptredenselect">';
foreach($db->query($sql1) as $result)
{
echo '<option value="'.$result['id'].'"'.(($result['id'] == $result2['optredenid']) ? ' selected="selected"' : '').'>'.$result['naam'].'</option>';
}
echo '</select>';
?>
$sql1 = "SELECT
id,
naam
FROM
optredens";
$sql2 = "SELECT
optredenid
FROM
gebeurtenissen
WHERE
gebeurtenissen.id = :gebeurtenisid";
$stmt = $db->prepare($sql2);
$stmt->bindParam(':gebeurtenisid', ifset($_GET['gebeurtenisid']), PDO::PARAM_INT);
$stmt->execute();
$result2 = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<select name="soortoptreden" id="soortoptredenselect">';
foreach($db->query($sql1) as $result)
{
echo '<option value="'.$result['id'].'"'.(($result['id'] == $result2['optredenid']) ? ' selected="selected"' : '').'>'.$result['naam'].'</option>';
}
echo '</select>';
?>
(Vereenvoudigde) Database structuur:
optredens
id | naam
gebeurtenissen
id | naam | optredenid
Groet
Newb
edit:
Vraag anders geformuleerd
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
SELECT
optredens.id AS optredenid
FROM
gebeurtenissen
JOIN
optredens
ON optredens.id = gebeurtenissen.optredenid
Nee, nu krijg ik alle optreden id's van alle gebeurtenissen. Dus als ik 20 gebeurtenissen heb die allemaal optreden id 1 hebben, krijg ik 20 keer 1 terug als resultaat van mijn query.
typisch geval van een group by
PHP Newbie schreef op 10.11.2008 19:18:
Nee, nu krijg ik alle optreden id's van alle gebeurtenissen. Dus als ik 20 gebeurtenissen heb die allemaal optreden id 1 hebben, krijg ik 20 keer 1 terug als resultaat van mijn query.
Kalle schreef op 10.11.2008 19:25:
typisch geval van een group by
Nee, dan zal ik i.p.v. 20 keer id 1, maar 1 keer id 1 terug krijgen. Dan heb ik nog niet id 2 t/m 20
Kalle schreef op 10.11.2008 19:25:
Dat zou dus precies een voorbeeld van het verkeerde gebruik van group by opleveren! Ik zie hier nergens een aggregate functie zoals COUNT() of SUM(), dus een GROUP BY is hier helemaal niet van toepassing...typisch geval van een group by
@Newbie: de join die je nu in je tweede query uitvoert, is in deze vorm nogal nutteloos. Je weet immers het optredenid al aangezien dat gewoon in de gebeurtenissen tabel staat. Zo lang je geen andere gegevens uit de optredens tabel wilt hebben, is de de join nergens voor nodig.
Tenslotte zie ik nog niet precies wat je probeert te bereiken. Wil je soms alle optredens die bij 1 bepaalde gebeurtenis horen? Dan zou je de join dus als volgt toe kunnen passen:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
o.id,
o.naam
FROM
gebeurtenissen AS g
INNER JOIN
optredens AS o
ON o.id = g.optredenid
AND
g.id = xx
o.id,
o.naam
FROM
gebeurtenissen AS g
INNER JOIN
optredens AS o
ON o.id = g.optredenid
AND
g.id = xx
Waarbij xx het id van de betreffende gebeurtenis voorstelt.
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
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
<?php
$sql1 = "SELECT
id,
naam
FROM
optredens";
$sql2 = "SELECT
optredens.id
FROM
gebeurtenissen
JOIN
optredens
ON optredens.id = gebeurtenissen.optredenid
WHERE
gebeurtenissen.id = :gebeurtenisid";
$stmt = $db->prepare($sql2);
$stmt->bindParam(':gebeurtenisid', ifset($_GET['gebeurtenisid']), PDO::PARAM_INT);
$stmt->execute();
$result2 = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<select name="soortoptreden" id="soortoptredenselect">';
foreach($db->query($sql1) as $result)
{
echo $result.'<option value="'.$result['id'].'"'.(($result['id'] == $result2['id']) ? ' selected="selected"' : '').'>'.$result['naam'].'</option>';
}
echo '</select>';
?>
$sql1 = "SELECT
id,
naam
FROM
optredens";
$sql2 = "SELECT
optredens.id
FROM
gebeurtenissen
JOIN
optredens
ON optredens.id = gebeurtenissen.optredenid
WHERE
gebeurtenissen.id = :gebeurtenisid";
$stmt = $db->prepare($sql2);
$stmt->bindParam(':gebeurtenisid', ifset($_GET['gebeurtenisid']), PDO::PARAM_INT);
$stmt->execute();
$result2 = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<select name="soortoptreden" id="soortoptredenselect">';
foreach($db->query($sql1) as $result)
{
echo $result.'<option value="'.$result['id'].'"'.(($result['id'] == $result2['id']) ? ' selected="selected"' : '').'>'.$result['naam'].'</option>';
}
echo '</select>';
?>
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
Dit zou je alle optredens opleveren en als daar een gebeurtenis bij hoort ook de gegevens daarvan. (Kan zijn dat het een Right join moet zijn.. maar dat zie je snel genoeg)
Je geeft niet aan of er per optreden een gebeurtenis MOET zijn.
Geef eens een overzicht van je datamodel betreffende deze 2 tabellen.
PHP Newbie schreef op 10.11.2008 20:10:
En wat ik dus probeer te zeggen, die tweede query die je uitvoert is ontzettend onlogisch. Beide queries samenvoegen zou dan ook simpelweg dit worden simpelweg de query opleveren die ik in mij vorige reactie al gaf...Dit wil ik dus vereenvoudigen tot 1 query:
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
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
<?php
$sql1 = "SELECT
id,
naam
FROM
optredens";
$sql2 = "SELECT
optredenid
FROM
gebeurtenissen
WHERE
gebeurtenissen.id = :gebeurtenisid";
$stmt = $db->prepare($sql2);
$stmt->bindParam(':gebeurtenisid', ifset($_GET['gebeurtenisid']), PDO::PARAM_INT);
$stmt->execute();
$result2 = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<select name="soortoptreden" id="soortoptredenselect">';
foreach($db->query($sql1) as $result)
{
echo '<option value="'.$result['id'].'"'.(($result['id'] == $result2['optredenid']) ? ' selected="selected"' : '').'>'.$result['naam'].'</option>';
}
echo '</select>';
?>
$sql1 = "SELECT
id,
naam
FROM
optredens";
$sql2 = "SELECT
optredenid
FROM
gebeurtenissen
WHERE
gebeurtenissen.id = :gebeurtenisid";
$stmt = $db->prepare($sql2);
$stmt->bindParam(':gebeurtenisid', ifset($_GET['gebeurtenisid']), PDO::PARAM_INT);
$stmt->execute();
$result2 = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<select name="soortoptreden" id="soortoptredenselect">';
foreach($db->query($sql1) as $result)
{
echo '<option value="'.$result['id'].'"'.(($result['id'] == $result2['optredenid']) ? ' selected="selected"' : '').'>'.$result['naam'].'</option>';
}
echo '</select>';
?>
Maar dat verandert niets aan de vraag ;-)
Boink
Zoef
http://dev.mysql.com/doc/refman/5.0/en/union.html
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay