PDA

View Full Version : Getting MySQL's JOIN to work -- Please Help


SaintDog
06-21-2003, 04:24 PM
I am working on a small hack for vBulletin and need to get a JOIN query to output the right data depending on a few things.

To start, I have 2 tables, one named hd_posts and the other hd_replies. What I want to do is when a post is shown, I want the replies with the matching ID to be show as well, if any are available.

Right now, I can show the post just fine, but I cannot create a query that works correctly so that I can call the matching replies as well.

I have outlined the table structure of each below:

hd_posts:

id, name, subtitle, subdate, subtime, message, and hashid

hd_replies:

id, tid, name, subtitle, subdate, subtime, message, and hashid

The tid is the ID of the matching post.

If anyone could help me get this working, I would greatly appreciate it. I am confused on this one query and cannot get it working at all.

Thanks in advance for anyone kind enough to take the time to help!

- SD

Xenon
06-21-2003, 11:05 PM
SELECT post.*, reply.name as replyname, reply.subtitle as replysubtitle.......
FROM hd_posts as post
LEFT JOIN hd_replies as reply ON (post.id = reply.tid)

this should do it..

SaintDog
06-22-2003, 06:36 AM
Thanks Xenon, but that does not seem to work, or I am just doing something wrong (the second part is probably the problem ;)).

Here is what I have, could you please tell me if there is a problem with this?


$listreply = ("SELECT post.*, reply.name as replyname, reply.subtitle as replysubtitle
FROM hd_posts as post
LEFT JOIN hd_replies as reply ON (post.id = reply.tid)");

while($listreplies = $DB_site->fetch_array($listreply)) {

eval('$viewreplies .= "' . fetch_template('viewreplies') . '";');

}


Using the above I get the following output at the top of the page:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /path/to/includes/db_mysql.php on line 250

Xenon
06-22-2003, 10:12 AM
it was just an example, not the full query, you have to add some reply fields at the end (folow my example of subtitle :))

and then the code itself you forgot an $DB_site

$listreply = $DB_site->query("SELECT post.*, reply.name as replyname, reply.subtitle as replysubtitle
FROM hd_posts as post
LEFT JOIN hd_replies as reply ON (post.id = reply.tid)");

while($listreplies = $DB_site->fetch_array($listreply)) {

eval('$viewreplies .= "' . fetch_template('viewreplies') . '";');

}
then be sure your viewreplies template does use the correct varnames :)

SaintDog
06-22-2003, 11:14 AM
I am not quite sure what else to add, I am just used to basic stuff since I am not that much of a programmer (as you can probably tell ;)).

What else would I need to add (as you mentioned above) to complete the query (I didn't add the $DB_site-> though it is in the original query, just left it off here).

Xenon
06-22-2003, 12:34 PM
hmm ok, then the long method ;)


$listreply = $DB_site->query("
SELECT post.*, reply.name as replyname, reply.subtitle as replysubtitle, reply.subtime as replysubtime, reply.message as replymessage, reply.hashid as replyhashid
FROM hd_posts as post
LEFT JOIN hd_replies as reply ON (post.id = reply.tid)
");

while($listreplies = $DB_site->fetch_array($listreply))
{

eval('$viewreplies .= "' . fetch_template('viewreplies') . '";');

}


and be sure as said $listreplies[reply....] is in your templates :)