[php] inner join and while loop

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb 2 tabellen, een tabel reumatologen en een tabel ziekenhuizen met de volgende stuctuur:

tabel reumatologen
reum_naam (naam van de reumatoloog)
email (e-mail adres)
ziekenhuis_id (ziekenhuis id)

tabel ziekenhuizen
ziekenhuis_id (ziekenhuis id)
naam (naam ziekenhuis)

een ziekenhuis kan dus 0 of meerdere reumatologen bevatten. Zo ver zo goed. ik heb er een SQL code voor dat is deze:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$query_namen = "    
SELECT
$table_ziekenhuis.ziekenhuis_id AS ziekenhuisid,
$table_ziekenhuis.naam  AS ziekenhuisnaam,

$table_namen.reum_naam  AS reumatoloognaam,
$table_namen.email      AS reumatoloogemail    
                 
FROM
$table_ziekenhuis 
INNER JOIN $table_namen 
ON($table_ziekenhuis.ziekenhuis_id=$table_namen.ziekenhuis)

WHERE
ziekenhuis_id=$id";

$resultaat_namen = mysql_query($query_namen);


Nu is het de bedoeling dat straks de naam van het ziekenhuis als titel gebruikt gaat worden, en dat daaronder de adres gegevens van het ziekenhuis komen (die later nog in de tabel komen). Daaronder moet een lijstje komen van alle reumatologen die werken in het ziekenhuis. Nu had ik zelf dit bedacht:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<TABLE BORDER="0" class=tekst_midden cellspacing="0" cellpadding="0" width="580" >
<? (list($ziekenhuisid, $ziekenhuisnaam,  $reumatoloognaam, $reumatoloogemail) = mysql_fetch_row($resultaat_namen)) ?>
<TR>
    <TD class="mid" height="24" colspan="5">naam: <?php echo ("$ziekenhuisid"); ?></TD>
</TR>
<? while (list($ziekenhuisid, $ziekenhuisnaam,  $reumatoloognaam, $reumatoloogemail) = mysql_fetch_row($resultaat_namen)) {?>
<TR>
    <TD class="mid" height="24" colspan="5">naam: <?php echo ("$reumatoloognaam"); ?></TD>

</TR>
<?}?>

</TABLE>


Maar nu geeft hij niet alle reumatologen van dat ziekenhuis weer, maar alleen de 1e uit de lijst. Wat doe ik verkeerd?

Acties:
  • 0 Henk 'm!

Verwijderd

Je geeft een WHERE mee, waarmee je zegt dat je alleen één bepaald ziekenhuis wilt. Mijn SQL kunsten zijn brak, dus bind me er niet op vast.

/ Edit

Bovendien zou je een foutmelding moeten krijgen aangezien beide tabellen een ziekenhuis_id hebben, waardoor die kolom dus ambigu is.

[ Voor 35% gewijzigd door Verwijderd op 18-01-2005 18:17 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nou ja, ik heb dus een lijst met ziekenhuizen in de pagina die voor deze pagina komt. Wanneer een gebruiker een ziekenhuis aanklikt wil ik een overzicht van dat ene ziekenhuis (vandaar de where) daaronder moet een lijst met gegevens komen van dat ziekenhuis dus o.a. de reumatologen

Acties:
  • 0 Henk 'm!

Verwijderd

Ik vind het redelijk logisch dat hij maar één reumatoloog ophaalt.

Je hebt twee tabellen en selecteert eerst uit de tabel ziekenhuizen een ziekenhuis met een gegeven ID. Vervolgens voeg je die lijst samen met gegevens uit de reumatologen database. Gevolg; je krijgt maar over 1 reumatoloog gegevens te zien.

Kan iemand met meer verstand even zeggen of mijn verhaal klopt?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
oke...zoiets kon ik me ook nog voorstellen, maar wat moet ik eraan doen?!

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou dit opsplitsen in twee aparte queries. Omdat het eigenlijk twee verschillende gegevens typen zijn die je wilt ophalen. Misschien kan dit prima in één query, en is het zelfs netter om het in één te doen. Zoals ik al gezegd heb: ben hier niet zo'n ster in.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je zou het sowieso al om moeten schrijven naar dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<TABLE BORDER="0" class=tekst_midden cellspacing="0" cellpadding="0" width="580" >
<? (list($ziekenhuisid, $ziekenhuisnaam,  $reumatoloognaam, $reumatoloogemail) = mysql_fetch_row($resultaat_namen)) ?>
<TR>
    <TD class="mid" height="24" colspan="5">naam: <?php echo ("$ziekenhuisid"); ?></TD>
</TR>
<? do { ?>
<TR>
    <TD class="mid" height="24" colspan="5">naam: <?php echo ("$reumatoloognaam"); ?></TD>

</TR>
<?} while (list($ziekenhuisid, $ziekenhuisnaam,  $reumatoloognaam, $reumatoloogemail) = mysql_fetch_row($resultaat_namen)) ?>

</TABLE>

Dit omdat je anders een reumatoloog overslaat.

Je query lijkt verder in orde. :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hey idd, dat was wat ik zocht. thnks

Acties:
  • 0 Henk 'm!

Verwijderd

Doh, op MSN bracht -NMe- mij weer wat inzicht. Je Query is inderdaad niet fout, zoals blijkt,maar volgens mij niet helemaal optimaal.
Je weet namelijk al dat je alle reumatologen uit één ziekenhuis ophaalt. Waarom zou je dan JOINEN? Dat kost alleen meer werk. Volgens mij is het sneller als je twee Queries schrijft: één voor het ophalen van de naam v/h ziekenhuis, een voor het ophalen van alle artsen.
Pagina: 1