query in query
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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);
?>
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
mvg: Lex van der Poel
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?
Toevoeging op 13/03/2012 13:12:41:
heb nu dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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);
?>
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.
Gewijzigd op 13/03/2012 13:21:18 door Erwin H
Erwin H op 13/03/2012 13:06:06:
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.
Gewijzigd op 13/03/2012 13:20:47 door Erwin H
Erwin H op 13/03/2012 13:19:35:
Dit gaat nu mis. "date" is een reserved word en kan je dus niet zomaar gebruiken.
Zie mijn vorige post.
Toevoeging op 13/03/2012 13:25:42:
Code (php)
1
2
3
4
2
3
4
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
FROM homepage a
LEFT JOIN users b ON a.userid = b.ID
ORDER BY date DESC
hij vervangt nu de a.userid met b.ID
maar hij moet de a.userid vervangen met b.username were b.ID = a.userid
Toevoeging op 13/03/2012 13:33:01:
snapt iemand hoe dat moet?
Hij vervangt helemaal niets. Het is geen update query.
en de username uit de tabel users waar de ID overeenkomt met de userid uit de homepage tabel.
weet iemand hoe dit moet?
Ja, dat heb ik je net gegeven.
ORACLE manier maar werkt ook voor ANSI
Dank jewel! dat werkt perfect :D
Want Erwin die had het gewoon opgelost op de manier waarop je het zei.
Gewijzigd op 13/03/2012 15:38:58 door Jan Willem R
Quote:
door het ID te vergelijken met de userid uit de tabel homepage
Dat ID moest dus blijkbaar zijn userid. Als je dat gewoon meteen had gezegd had je ook meteen een goed antwoord gekregen.
sorrie zit met mn gedachten bij twee andere opdrachten :P