Ik ben alweer druk aan het programmeren, maar ben nu tegen een probleem aan gelopen waar ik niet meer uit kom. Ik zal even de situatie zo duidelijk mogelijk proberen uit te leggen.
Ik ben bezig met een advertentie website. De database bevat een tabel 'Rubriek'. Die tabel ziet er als volgt uit:
Korte uitleg:
- rubrieknummer is een automatisch nummerings veld en is de primary key van de tabel.
- rubrieknaam spreekt voor zich, dat is de naam van de rubriek.
- rubriek is een optionele kolom, wanneer de betreffende rubriek een subrubriek is van een andere rubriek vul je hier het 'rubrieknummer' in van die rubriek die boven deze rubriek valt.
- volgnr is de kolom waarmee de volgorde van sorteren wordt bepaald.
Wat ik nu dus wil zijn automatische breadcrumbs. Als ik bijvoorbeeld op de pagina rubriek.php?rid=6 ben, wil ik het volgende te zien krijgen: ELECTRONICA -> TELEVISIES.
Kan iemand mij helpen een query te maken waarmee ik telkens kan kijken een rubriek een subrubriek is van een andere rubriek, en zo ja de rubrieknaam + rubrieknummer van deze hogere rubriek tonen?
Alvast bedankt!
Tim
* Ik krijg het niet voor elkaar om het voorbeeld overzichtje netjes te tonen, het is blijkbaar niet toegestaan meerdere spaties te gebruiken.
Geeft niet, ging ik van uit. mysqli_query werkt op mysql ;-) de i staat voor 'improved'. Ik gebruik het sinds kort, maar de voordelen heb ik er nog niet uit kunnen halen... naja komt (hopelijk) wel. Je zou evengoed mysql_query of mysql_fetch_array kunnen gebruiken.
Edit: dat mysqli misschien efficienter is ofzo ;-) naja ik weet het niet - ik moet mij daar nog even in verdiepen maar ik dacht laat ik d'r meteen mee aan de slag gaan in de toekomst.
Geeft niet, ging ik van uit. mysqli_query werkt op mysql ;-) de i staat voor 'improved'. Ik gebruik het sinds kort, maar de voordelen heb ik er nog niet uit kunnen halen... naja komt (hopelijk) wel. Je zou evengoed mysql_query of mysql_fetch_array kunnen gebruiken.
Edit: dat mysqli misschien efficienter is ofzo ;-) naja ik weet het niet - ik moet mij daar nog even in verdiepen maar ik dacht laat ik d'r meteen mee aan de slag gaan in de toekomst.
mysql word niet meer ondersteund in php6, dan zul je over moeten op mysqli
edit: nou twijfel ik er toch een beetje aan of dat zo is (?)
@Patrick: MySQL en MSSQL zijn 2 totaal verschillende databases, de 2e heeft helemaal niets met MySQL te maken. Je zou ook Oracle of DB2 in dit rijtje kunnen zetten.
Al heeft Oracle nog wel iets met MySQL te maken, zij zijn de eigenaar van de innoDB-engine.
Maar die query is toch niet zo ingewikkeld? Je moet hier een functie omheen bouwen die steeds blijft kijken of je er nog 1 omhoog kan. Een recursive functie heet dat geloof ik
let op! Ik heb je tabelnaam veranderd omdat ik dit logischer vind. Ook moet je nooit hoofdletters in je tabelnamen gebruiken.
<?php
$sql = "SELECT
*
FROM
rubrieken
WHERE
rubriek = '".$input."'
";
$res = mysql_query($sql);
?>
Google dus even op recursive functies. Ook op het forum hier is daar nogal wat van te vinden.
Als ik het volgende script uitvoer krijg ik 2 errors:
<?php
// Maak verbinding met de database
$server = "**";
$gebruiker = "**";
$wachtwoord = "**";
$db = "testdatabase";
$dbc = mssql_connect($server,$gebruiker,$wachtwoord)
or die ("Kon geen verbinding maken met de server");
mssql_select_db($db,$dbc)
or die ("Kon de database niet selecteren");
// Recursieve functie die door de rubriek-tabel loopt
function printTree($r, $offset = 0) {
while($rubriek = mssql_fetch_array($r)) {
// Print rubriek gegevens
list($nr, $naam, $parent) = $r;
echo "<li style=\"margin-left: " . $offset . "px;\"><a href=\"link_naar_rubriek_$nr\">$naam</a></li>";
// Print subrubrieken
$sub_r = mssql_query($dbc, "SELECT rubrieknummer, rubrieknaam, rubriek FROM Rubriek WHERE rubriek == $nr ORDER BY volgnr ASC");
printTree($sub_r, $offset + 5);
}
}
// Print rubriek
$r = mssql_query($dbc, "SELECT rubrieknummer, rubrieknaam, rubriek FROM Rubriek WHERE rubriek IS NULL ORDER BY volgnr ASC");
echo "<ul>";
printTree($r);
echo "</ul>";
?>
Ik krijg de volgende errors:
Warning: mssql_query(): supplied argument is not a valid MS SQL-Link resource in testjee.php on line 37
Warning: mssql_fetch_array(): supplied argument is not a valid MS SQL-result resource in testjee.php on line 25
@Crispijn wat betreft hoofdletters, ik zit momenteel op hbo hier hebben ze me aangeleerd bij tabelnamen hoofdletters te gebruiken en zie dat ze het in het boek 'Relationele Databases en SQL' ook doen. Maargoed dat zijn eigen keuzes. Ik zal even googlen ondertussen naar recursieve functies, bedankt voor de tip!