<?php
require_once('includes/config.php');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('Unable to connect to server, Please contact the site administrator');
}
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("Unable to select database, Please contact the site administrator");
}
$result = mysql_query('SELECT * FROM homepage ORDER BY `date` DESC');
if (!$result) {
die('Could not query:' . mysql_error());
}
while ($row = mysql_fetch_array($result)) {
echo "<div class=\"post\"><h2 class=\"title\"><a href=\"#\">" . $row["title"] . "</a></h2><p class=\"meta\"><span class=\"date\">" . $row["date"] . "</span><span class=\"posted\">Posted by <a href=\"user.php?user=" . $row["userid"] . "\">" . $row["userid"] . "</a></span></p><div style=\"clear: both;\"> </div><div class=\"entry\">" . $row["msg"] . "<div align=\"right\"><a onclick=\"jQuery('html, body').animate( { scrollTop: 0 }, 'slow' );\" href=\"javascript:void(0);\">Back to Top</a></div></div></div>";
}
mysql_close($link);
?>
die haalt de userid op uit mijn database maar nu wil ik dat hij in de tabel users gaat kijken welke username bij de user id hoort maar ik krijg dit zelf niet voor elkaar
In de eerste plaats even je query en tabel opschonen:
SELECT * FROM homepage ORDER BY `date` DESC
Geen * gebruiken in je query. Dat is inefficient en bij de volgende stap (een join maken om de username op te halen) kan het zelfs problematisch worden. Dus schrijf de kolommen uit die je nodig hebt (ook als het alle kolommen zijn!).
Daarnaast gebruik je backticks zodat je "date" als kolomnaam kunt gebruiken. Dat is ook niet een nette oplossing. Pas dus de naam van die kolom aan zodat je geen reserved word meer gebruikt en je de backticks kunt weglaten.
Dan, om de join te maken om je username op te halen heb ik je tabel structuur nodig. Dus welke tabel staat de username in en welke kolommen zijn daarin gedefinieerd?
username staat in de tabel users en je moet hem krijgen door het ID te vergelijken met de userid uit de tabel homepage waar de tabellen titel, date, userid & msg nodig zijn voor het bericht helpt dit?
[size=xsmall]Toevoeging op 13/03/2012 13:12:41:[/size]
heb nu dit:
<?php
require_once('includes/config.php');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('Unable to connect to server, Please contact the site administrator');
}
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("Unable to select database, Please contact the site administrator");
}
$result = mysql_query('SELECT title, date, msg, userid FROM homepage ORDER BY date DESC');
if (!$result) {
die('Could not query:' . mysql_error());
}
while ($row = mysql_fetch_array($result)) {
echo "<div class=\"post\"><h2 class=\"title\"><a href=\"#\">" . $row["title"] . "</a></h2><p class=\"meta\"><span class=\"date\">" . $row["date"] . "</span><span class=\"posted\">Posted by <a href=\"user.php?user=" . $row["userid"] . "\">" . $row["userid"] . "</a></span></p><div style=\"clear: both;\"> </div><div class=\"entry\">" . $row["msg"] . "<div align=\"right\"><a onclick=\"jQuery('html, body').animate( { scrollTop: 0 }, 'slow' );\" href=\"javascript:void(0);\">Back to Top</a></div></div></div>";
}
mysql_close($link);
?>
SELECT a.titel, a.date, a.userid, a.msg, b.username
FROM homepage a
LEFT JOIN users b ON a.userid = b.ID
ORDER BY date DESC
Waarbij is dus al de aanpassingen heb gemaakt zoals aangegeven in vorige post...
Wat betreft joins: er zijn verschillende type joins. Ik gebruik nu een LEFT JOIN waardoor er altijd een waarde zal komen voor username. Als er geen matching record wordt gevonden in de users tabel dan krijg je NULL als waarde voor username.
Een andere mogelijkheid is om een INNER JOIN te gebruiken wat niets zal selecteren als er geen matching rows worden gevonden. Als je dus een pagina hebt waar geen user record voor is, dan krijg je die pagina niet in deze query te zien. Aangezien ik denk dat je dit niet wilt heb ik de andere join methode gebruikt.
Daarnaast gebruik je backticks zodat je "date" als kolomnaam kunt gebruiken. ... zodat je geen reserved word meer gebruikt en je de backticks kunt weglaten.
DATE is geen reserved word.
Verder totaal eens met geen backtics gebruiken.
maar ik will dat de query title, date, userid, msg uit de tabel homepage laad
en de username uit de tabel users waar de ID overeenkomt met de userid uit de homepage tabel.
weet iemand hoe dit moet?