SELECT alle data en toon geselecteerde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Newbie

PHP Newbie

10/11/2008 17:51:00
Quote Anchor link
Heey allemaal,

Om een lang verhaal kort te maken. Ik wil graag $sql1 en $sql2 uit onderstaand script samenvoegen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
?>


(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
 
PHP hulp

PHP hulp

23/11/2024 08:59:39
 
Noppes

Noppes

10/11/2008 17:58:00
Quote Anchor link
De where clause weg en je hebt hetgene wat je wilt hebben, het enige wat je nog moet doen is de velden welke je wilt tonen in de select opnemen

SELECT
optredens.id AS optredenid
FROM
gebeurtenissen
JOIN
optredens
ON optredens.id = gebeurtenissen.optredenid
 
PHP Newbie

PHP Newbie

10/11/2008 19:18:00
Quote Anchor link
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 P

Kalle P

10/11/2008 19:25:00
Quote Anchor link
typisch geval van een group by
 
PHP Newbie

PHP Newbie

10/11/2008 19:33:00
Quote Anchor link
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
 
Joren de Wit

Joren de Wit

10/11/2008 19:34:00
Quote Anchor link
Kalle schreef op 10.11.2008 19:25:
typisch geval van een group by
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...

@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)
PHP script in nieuw venster Selecteer het PHP script
1
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

Waarbij xx het id van de betreffende gebeurtenis voorstelt.
 
PHP Newbie

PHP Newbie

10/11/2008 20:10:00
Quote Anchor link
Dit wil ik dus vereenvoudigen tot 1 query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
?>
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
Ano Niem

Ano Niem

10/11/2008 20:27:00
Quote Anchor link
SELECT * FROM optredens o LEFT JOIN gebeurtenissen ON (o.id = g.optredenid)

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.
 
Joren de Wit

Joren de Wit

10/11/2008 20:36:00
Quote Anchor link
PHP Newbie schreef op 10.11.2008 20:10:
Dit wil ik dus vereenvoudigen tot 1 query:
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...
 
PHP Newbie

PHP Newbie

10/11/2008 21:11:00
Quote Anchor link
Aha, op die fiets Blanche. Zo is het beter:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
?>


Maar dat verandert niets aan de vraag ;-)
 
PHP Newbie

PHP Newbie

11/11/2008 23:44:00
Quote Anchor link
Boink
 
PHP Newbie

PHP Newbie

13/11/2008 00:48:00
Quote Anchor link
Zoef
 
Emmanuel Delay

Emmanuel Delay

13/11/2008 04:55:00
Quote Anchor link
Al eens naar UNION gekeken?
http://dev.mysql.com/doc/refman/5.0/en/union.html
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.