ik ben bezig online ledenregister en gebruik dit script om te zoeken:
<?php
mysql_select_db("ledenregister2") or die(mysql_error());

$aantal = mysql_num_rows(mysql_query("SELECT * FROM leden")) or die(mysql_error());

if (!$_POST['zoek']){
?/>
<form name="zoeken" action="" method="post">
<table cellspacing="0" width="680px" align="center" border="0">
<tr><td align="center" colspan="2"><input size="60" type="text" name="zoek" maxlength="60"> </td></tr>
<tr><td colspan="2" align="center"><input type="submit" name="submit" value="Zoeken"></td></tr>
</table>
</form>
<?php
}
else{
if(strlen($_POST['zoek']) < 4) {
echo "De zoekterm moet minimaal 4 tekens lang zijn.";
}
else
{
$keyword = mysql_real_escape_string($_POST['zoek']);
$query = "SELECT *, DATE_FORMAT(geb_datum, '%d-%m-%Y') AS geb_datum2 FROM leden
WHERE MATCH (voornaam, achternaam)
AGAINST ('$keyword' IN BOOLEAN MODE)
ORDER BY volgorde, type ASC";
$resultaat = mysql_query($query);
if (mysql_num_rows($resultaat) >= 1)
{
echo "De volgende resultaten zijn gevonden:";

while ($row = mysql_fetch_array($resultaat))
{

?/>
<table border="1">
<tr>
<td width="250px"><?php echo($row['voornaam']." ".$row['voorvoeg']." ".$row['achternaam']) ?/></td>
<td width="100px"><?php echo($row['geb_datum2']) ?/></td>
<td width="20px"><?php echo(($row['status'] == 1) ? 'D' : (($row['status'] == 2) ? 'B' : "")) ?/></td>
<td width="200px" rowspan="3"><?php echo ($row['adres']."<br>
".$row['postcode']." ".$row['woonplaats']."<br>
".$row['telefoon']) ?/></td>
<td width="20px" style="text-align:right" rowspan="3"><?php echo($row['wijk']) ?/></td>
</tr>
<tr><td><?php echo($row['email']) ?/></td></tr>
</table>
<?php
}
}
else{
echo "<br>Er is niets gevonden op jou zoekterm";
}
}
}
?>
( ?/> = ?> maar als ik dat gebruik maakt ie dr niet 1 codevak van )

maar als ik nu zoek op bijv een achternaam van een famillie krijg ik alle leden van die familie in een aparte tabel..
vb:

<table>
HOOFDBEWONER
</table>
<table>
eventuele PARTNER
</table>
<table>
eventuele kinderen
</table>
<table>
eventuele kinderen
</table>

in mij mysql tabel heb ik een kolom "volgorde" in deze kolom hebben alle families een unieke code dus alle leden van een familie hebben dezelfde code

ook heb ik de kolom:
TYPE = type van persoon (0= hoofdbewoner, 1= partner, 2= kind)


hoe ik nu wil dat mijn resulaten worden weergegeven 1 tabel met daarin alle leden van die familie:
http://img215.imageshack.us/img215/5904/layoutsr0.png
de bovenste is de hoofdbewoner. (type 0)
daaronder de eventuele (dus deze hoeft niet aanwezig te zijn) partner (type 1)
en daaronder de eventuele (ook deze hoeven niet aanwezig te zijn) kinderen (type 2)


ook als maar 1 lid van een bepaalde familie in de zoekresultaten voorkomt moet de hele familie worden weergegeven..

kan dit? zoja hoe doe ik dit..
ben nog niet echt heel goed met php/mysql dus uitgebreide uitleg word gewardeerd...
*bumb*
Het weergeven is puur een kwestie van output, dat ga je dus met PHP regelen. Als je ervoor zorgt dat je een query uitvoert die jou alle benodigde data levert, kun je daar verder in PHP mee gaan spelen.

Zonder datamodel kan ik er echter niet veel meer zinnigs over zeggen, dus misschien dat je dat eens kunt laten zien.
wat bedoel je met datamodel?
dit is mijn mySQL tabel:
http://img143.imageshack.us/img143/7573/layoutzg0.png


GEZINSNAAM = de gezinsnaam
Volgorde = vormt samen met de gezinsnaam een unieke combinatie voor elk gezin
ADRES = spreekt voor zich
POSTCODE = spreekt voor zich
WIJK = de wijk waar het lid zich in bevind (I, II, III, IV, enz...)
TELEFOON = spreekt voor zich
EMAIL = spreekt voor zich
ACHTERNAAM = spreekt voor zich
VOORVOEG = voorvoegsel achternaam (de ,van der, het, enz.)
VOORNAAM = spreekt voor zich
GEB_DATUM = spreekt voor zich
STATUS = Dit kan 1 of 2 zijn 1 word door PHP uiteindelijk als D weergegeven en 2 als B
GESLACHT = spreekt voor zich (wil ik (nog) niet gebruiken)
TYPE = type van persoon (0= hoofdbewoner, 1= partner, 2= kind)
WOONPLAATS = spreekt voor zich
Wat je zou kunnen doen is elk uniek voorkomen van 'Volgorde' uit je tabel ophalen. Deze vervolgens uitlezen met een while loop en hierin vervolgens met een query de gegevens van die familie ophalen...
dat snap ik niet..
zou je een voorbeeldje kunnen geven?

ben nog niet zo heel goed met php en mysql
Hmm, nu ik er nog eens goed naar kijk, zie ik een nog veel groter probleem. Je bent namelijk aan de slag gegaan met een verkeerd datamodel...

Als je namelijk gaat normaliseren zul je zien dat je een aparte tabel voor de gezinnen en de gezinsleden zult krijgen. Ervan uitgaande dat elk gezinslid op hetzelfde adres woont, zou je die informatie kwijt kunnen in de gezinnen tabel. In de gezinsleden tabel kun je vervolgens de persoonlijke informatie als email, geslacht, geboortedatum, etc kwijt.

Het is verstandig om dat eerst te doen voordat je verder gaat werken. Het kan namelijk grote problemen in de toekomst voorkomen en bovendien lost dat direct ook het probleem op dat je nu hebt. Het selecteren van gegevens wordt een stuk makkelijker met een juist datamodel.
Allereerst ga je nog de nodige indexen in je database aanbrengen. Dus de primary keys in de verschillende tabellen alsmede de foreign key waarmee je de relatie tussen de beide tabellen legt.

Ik hoop dat je wel voor de InnoDB engine gekozen hebt bij het aanmaken van de tabellen? Dat is namelijk de enige engine waarmee je onderlinge relaties tussen tabellen kunt leggen, en dat heb je wel nodig ;-)
Blanche schreef op 06.02.2008 21:44
Allereerst ga je nog de nodige indexen in je database aanbrengen. Dus de primary keys in de verschillende tabellen alsmede de foreign key waarmee je de relatie tussen de beide tabellen legt.


op welke kolommen moet ik welke indexen zetten dan?

Blanche schreef op 06.02.2008 21:44

Ik hoop dat je wel voor de InnoDB engine gekozen hebt bij het aanmaken van de tabellen? Dat is namelijk de enige engine waarmee je onderlinge relaties tussen tabellen kunt leggen, en dat heb je wel nodig ;-)

met InnoDB kon je dacht ik geen fulltext search doen wat ik wel gebruikte met mijn vorige tabel..

edit:
heb ze aangepast naar InnoDB
Dat is het grote nadeel van MySQL, het is het een of het ander. En dan zou ik toch echt voor de InnoDB engine gaan aangezien die relaties een stuk belangrijker zijn!

Aangezien 'volgorde' de unieke waarde is krijg je in die tabel een PK op die kolom. Verder lijkt me dat in de andere tabel het lidnummer de unieke waarde is, dus dan komt daar de PK op te zitten. Tenslotte gok ik dat 'gezinsnummer' de kolom is die naar de 'volgorde' kolom uit de andere tabel verwijst. In dat geval zou dat dus de FK worden.

Verder zul je nog enkele indexen aan willen maken op bepaalde kolommen, maar dat hangt een beetje van de queries af die je voornamelijk gaat gebruiken.

Reageren