query in query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lex van der poel

lex van der poel

13/03/2012 12:59:24
Quote Anchor link
oke ik heb deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;\">&nbsp;</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
 
PHP hulp

PHP hulp

22/12/2024 10:54:25
 
Erwin H

Erwin H

13/03/2012 13:06:06
Quote Anchor link
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?
 
Lex van der poel

lex van der poel

13/03/2012 13:10:02
Quote Anchor link
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?

Toevoeging op 13/03/2012 13:12:41:

heb nu dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;\">&nbsp;</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);
?>
 
Erwin H

Erwin H

13/03/2012 13:17:30
Quote Anchor link
Dan wordt je query waarschijnlijk dit:

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
 
- SanThe -

- SanThe -

13/03/2012 13:19:31
Quote Anchor link
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.
 
Erwin H

Erwin H

13/03/2012 13:19:35
Quote Anchor link
EDIT: je hebt helemaal gelijk SanThe. My bad! date kan je dus wel gebruiken als kolomnaam.
Gewijzigd op 13/03/2012 13:20:47 door Erwin H
 
- SanThe -

- SanThe -

13/03/2012 13:20:44
Quote Anchor link
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.
 
Lex van der poel

lex van der poel

13/03/2012 13:21:27
Quote Anchor link
ok bedankt voor de reacties gan nu testen :P (en aanpasen)

Toevoeging op 13/03/2012 13:25:42:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

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?
 
Erwin H

Erwin H

13/03/2012 14:42:39
Quote Anchor link
Hij vervangt helemaal niets. Het is geen update query.
 
Lex van der poel

lex van der poel

13/03/2012 15:27:17
Quote Anchor link
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?
 
Erwin H

Erwin H

13/03/2012 15:30:48
Quote Anchor link
Ja, dat heb ik je net gegeven.
 
Jan Willem R

Jan Willem R

13/03/2012 15:31:10
Quote Anchor link
Waarschijnlijk bedoel je dat de homepage userid gelijk is aan userid van de User tabel..

ORACLE manier maar werkt ook voor ANSI
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT a.titel, a.date, a.userid, a.msg, b.username FROM homepage a, users b WHERE a.userid = b.userid ORDER BY date DESC
 
Lex van der poel

lex van der poel

13/03/2012 15:36:54
Quote Anchor link
Dank jewel! dat werkt perfect :D
 
Jan Willem R

Jan Willem R

13/03/2012 15:38:25
Quote Anchor link
Ben blij dat ik van dienst kon zijn maar voortaan niet 2 dingen door elkaar heen zeggen ;)

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
 
Erwin H

Erwin H

13/03/2012 15:39:45
Quote Anchor link
Geef dan de volgende keer een duidelijk antwoord op de vraag. Ik vroeg specifiek naar de kolommen in je tabel en jij gaf als antwoord:
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.
 
Lex van der poel

lex van der poel

13/03/2012 15:45:11
Quote Anchor link
sorrie zit met mn gedachten bij twee andere opdrachten :P
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.