phpbb: News Mod - 2 Abfragen mit count() aus 1 tabelle?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Jason

phpbb: News Mod - 2 Abfragen mit count() aus 1 tabelle?

Beitrag von Jason »

Hi,
ich habe mir einen kleinen News Mod fürs phpbb gebastelt,die tabelle dafür ist wie folgt aufgebaut:

Code: Alles auswählen

news_id | news_typ | user_id | news_text
Bei news_typ gibt es 2 typen einmal die kommentierten News ( Typ: 1 ) und einmal die unkommentierten News (Typ: 2) nun möchte die Anzahl der kommentierten und der unkommentierten News des Users der grade Online ist aus der DB auslesen wenn ich nur die kommentierten auslesen will funzt es wenn ich es so mache:

Code: Alles auswählen

$sql = "SELECT user_id, count(*) AS total
        FROM " . NEWS_TABLE . "
        WHERE news_type = 1 AND user_id = " . $userdata['user_id'];
if ( !$result = $db->sql_query($sql) )
                {
                        message_die(GENERAL_ERROR, 'Could not get user id and username from users table', '', __LINE__, __FILE__, $sql);
                }
if ( $total = $db->sql_fetchrow($result) )
   {
                $comment_news = $total['total'];
   }
Nun habe ich es so probiert um auch die Anzahl der unkommentierten auszulesen:

Code: Alles auswählen

$sql = "SELECT user_id, count(*) AS comment, count(n.*) AS uncomment
        FROM " . NEWS_TABLE . "
        LEFT JOIN " NEWS_TABLE . " n ON n.news_type = 2 AND user_id = '.$userdata['user_id'].'
        WHERE news_type = 1 AND user_id = " . $userdata['user_id'];
if ( !$result = $db->sql_query($sql) )
                {
                        message_die(GENERAL_ERROR, 'Could not get user id and username from users table', '', __LINE__, __FILE__, $sql);
                }

if ( $comment = $db->sql_fetchrow($result) )
   {
                $comment = $comment['comment'];
   }

if ( $uncomment = $db->sql_fetchrow($result) )
   {
                $uncomment = $uncomment['uncomment'];
   }
aber des funkt. irgendwie net!

Ich hoffe mal es hat jemand verstanden was ich meine und kann mir helfen :)

Grüße Jason
Jason

Beitrag von Jason »

Niemand der mir helfen kann????? :cry:

Jason
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Code: Alles auswählen

$sql = "SELECT count(*) AS total FROM " . NEWS_TABLE . " WHERE news_type = 1 AND user_id = " . $userdata['user_id'];
if ( !$result = $db->sql_query($sql) ) 
{ 
    message_die(GENERAL_ERROR, 'Could not get user id and username from users table', '', __LINE__, __FILE__, $sql); 
} 
if ( $total = $db->sql_fetchrow($result) ) 
{ 
    $comment = $total['total']; 
}

$sql = "SELECT count(*) AS total FROM " . NEWS_TABLE . " WHERE news_type = 2 AND user_id = " . $userdata['user_id'];
if ( !$result = $db->sql_query($sql) ) 
{ 
    message_die(GENERAL_ERROR, 'Could not get user id and username from users table', '', __LINE__, __FILE__, $sql); 
} 
if ( $total = $db->sql_fetchrow($result) ) 
{ 
    $uncomment = $total['total']; 
}
Jason

Beitrag von Jason »

hmm geht das nur über 2 separate Abfragen?
Eigentlich hatte ich vor noch 4 Weitere News Typen zu definieren das hieße dann ja ich müsste 6 sql Abfragen dafür machen :o

Grüße Jason
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Code: Alles auswählen

$sql = "SELECT news_type, count(*) AS anzahl FROM " . NEWS_TABLE . " WHERE user_id = " . $userdata['user_id'] . " GROUP BY news_type; 
if ( !$result = $db->sql_query($sql) ) 
{ 
    message_die(GENERAL_ERROR, 'Could not get user id and username from users table', '', __LINE__, __FILE__, $sql); 
}
$news_count = array();
while ( $news_row = $db->sql_fetchrow($result) ) 
{ 
    $news_count[$news_row['news_type']] = $news_row['anzahl'];
}
Danach ist in $news_count[1] die Anzahl der kommentierten News und in $news_count[2] die Anzahl der unkommentierten.
Antworten

Zurück zu „Coding & Technik“