Re: Inner join woes... and sweet tea!
| From: | Peter Lind | Date: | Mon, 05 Jul 2010 13:14:49 +0000 |
| Subject: | Re: Inner join woes... and sweet tea! | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-306690@lists.php.net to get a copy of this message | ||
On 5 July 2010 15:02, Jason Pruim <lists@pruimphotography.com> wrote:
> Hi everyone,
>
> I'll admit right now that I'm still trying to wrestle with inner joins...
> Which leaves me with this code right here:
>
> <?PHP
>
> if(isset($_GET['cat'])) {
> $cat = mysql_real_escape_string($_GET['cat']);
>
> }
>
> if(isset($cat)) {
> $sql = "SELECT * FROM ".$cfgtableContent." INNER JOIN
> ".$cfgtableCategories." WHERE ".$cfgtableContent.".postCat =
> ".$cat." ORDER
> BY ".$cfgtableContent.".postNumber DESC";
>
> }
>
> ?>
>
> Now... I know the problem is probably staring an experienced inner join
> master in the face and I don't even have to say it... But for those who
> don't know or you might be searching the archives and want to learn from my
> blatant misunderstanding of inner joins I'll outline said problem in the
> following lines.
>
> What I want to achieve: Add navigation by category to my blog. IE: If I want
> to display just Personal posts click on the "Personal" link and all other
> posts magically disappear.
>
> What I'm getting now: I have 5 categories in my blog now... I get 5 copies
> of each post repeated down the site all with a different category...
>
> All the variables are filled in correctly which I have checked with simple
> echo's. I have also tried removing the escaping of the data with no change
> so if possible I'd like to leave it in there as is :)
>
> I have also tried switching it from the above to this:
>
> <?PHP
>
> $sql = "SELECT * FROM ".$cfgtableContent." INNER JOIN
> ".$cfgtableContent." WHERE ".$cfgtableCategories.".postCat =
> ".$cat." ORDER
> BY ".$cfgtableContent.".postNumber DESC";
>
> ?>
>
> with no change...
>
There's no join clause in your query, i.e. nothing to tie the two
tables together. That will leave you with a cartesian product, i.e.
for every row in table a you'll get the entire table b joined on. You
need to specify how the tables you're joining together are related.
Something like
SELECT
a.row
FROM
a
JOIN b ON b.a_id = a.id
Regards
Peter
--
<hype>
WWW: http://plphp.dk / http://plind.dk
LinkedIn: http://www.linkedin.com/in/plind
BeWelcome/Couchsurfing: Fake51
Twitter: http://twitter.com/kafe15
</hype>