Avatar billede hoppe11 Nybegynder
16. november 2007 - 15:59 Der er 3 kommentarer og
1 løsning

left join og select

hvordan gør man nedenstående korrekt?

$sql = "SELECT forum.id, tmp.num
    FROM $DB.forum forum
    LEFT JOIN
    (
        SELECT COUNT(forum.id) AS num
        FROM $DB.forum forum
        LEFT JOIN $DB._att_forum att_forum ON att_forum.contr_id=forum.id
        WHERE forum.thread_id=76 && forum.id!=forum.thread_id && COALESCE(att_forum.att_remove, 0)=0
        GROUP BY forum.thread_id
    ) AS tmp";
Avatar billede hoppe11 Nybegynder
16. november 2007 - 17:33 #1
Hvis man laver en inner join i stedet ser det ud til at virke

$sql = "SELECT forum.id, tmp.num
    FROM $DB.forum forum
    INNER JOIN
    (
        SELECT COUNT(forum2.id) AS num
        FROM $DB.forum forum2
        LEFT JOIN $DB._att_forum att_forum ON att_forum.contr_id=forum2.id
        WHERE forum2.thread_id=76 && forum2.id!=forum2.thread_id $sql_where
        GROUP BY forum2.thread_id
    ) AS tmp";

men hvordan kan man få min where clause i min inner join (forum2.thread_id=76) ændret så den i stedet tager forum.id fra den ydre table?

hvis jeg skriver forum2.thread_id=forum.id får jeg fejl?

Unknown column 'forum.id' in 'where clause'
Avatar billede hoppe11 Nybegynder
16. november 2007 - 21:11 #2
hvordan *biip* gør man det her!?

her får jeg også fejl... :-/

$sql = "SELECT forum.id, tmp.num
    FROM $DB.forum forum
    INNER JOIN
    (
        SELECT COUNT(forum.id) AS num
        FROM $DB.forum forum
        LEFT JOIN $DB._att_forum att_forum ON att_forum.contr_id=forum.id
        WHERE forum.id!=forum.thread_id $sql_where
        GROUP BY forum.thread_id
    ) AS tmp ON tmp.thread_id=forum.id
    WHERE forum.id!=forum.thread_id";
Avatar billede hoppe11 Nybegynder
16. november 2007 - 21:17 #3
undskyld.. sådan her.. nu får jeg dog ingen fejl, men til gengæld heller ingen udtræk..

hvem kan hjælpe mig?

$sql = "SELECT forum.id, tmp.num
    FROM $DB.forum forum
    INNER JOIN
    (
        SELECT forum.thread_id, COUNT(forum.id) AS num
        FROM $DB.forum forum
        LEFT JOIN $DB._att_forum att_forum ON att_forum.contr_id=forum.id
        WHERE forum.id!=forum.thread_id $sql_where
        GROUP BY forum.thread_id
    ) AS tmp ON tmp.thread_id=forum.id
    WHERE forum.id!=forum.thread_id";
Avatar billede hoppe11 Nybegynder
16. november 2007 - 21:42 #4
$sql = "SELECT forum.id, forum.subject, forum.time, att_forum.att_lock, IF(att_forum.att_stick, forum.time, 0) AS att_stick, att_forum.att_remove, tmp.max_time, tmp.num
        FROM ($DB.forum forum
            LEFT JOIN $DB._att_forum att_forum ON att_forum.contr_id=forum.id)
            LEFT JOIN
            (
                SELECT forum.thread_id, MAX(forum.time) AS max_time, COUNT(forum.id)-1 AS num
                FROM $DB.forum forum
                LEFT JOIN $DB._att_forum att_forum ON att_forum.contr_id=forum.id
                WHERE 1 $sql_where
                GROUP BY forum.thread_id
            ) tmp ON tmp.thread_id=forum.id
        WHERE forum.locale_id='$LID' && forum.forum_id='$key' && forum.id=forum.thread_id $sql_where
        ORDER BY att_stick DESC, max_time DESC
        LIMIT ".$limit_arr[$key];

:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester