Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
MySQL befehl verstehen und umschreiben [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
MySQL befehl verstehen und umschreiben


 
daimonion
12-04-2007, 17:57 
 
Hallo

Ich hoffe hier finden sich eine MySQL'er die sich vielleicht mal mein Problem anschauen können.

Mal als grobe Richtung: Es geht um eine MySQL abfrage innerhalb eines PHP-Skriptest, welches sich in dem Orion Board befindet.

Dort gibt es einen Teil der folgendermaßen aussieht:

if (check_mysql_version())
{
$sql = "SELECT u.user_id, u.username, u.user_posts, Count(p.post_id) AS new_counter
FROM " . USERS_TABLE . " u
INNER JOIN " . POSTS_TABLE . " p ON u.user_id = p.poster_id
WHERE u.user_id <> " . ANONYMOUS . "
GROUP BY u.user_id, u.username, u.user_posts";
}
else
{
$sql = "SELECT u.user_id, u.username, u.user_posts, Count(p.post_id) AS new_counter
FROM " . USERS_TABLE . " u, " .
POSTS_TABLE . " p
WHERE u.user_id = p.poster_id
AND u.user_id <> " . ANONYMOUS . "
GROUP BY u.user_id, u.username, u.user_posts";
}

Für was ist dieser Code gut?
Kurz gesagt mit diesem Code werden die Beitragszähler neu berechnet.

Weiter unten im Code werden die Werte dann, so glaub ich nur wieder an die entsprechenden Stellen in der Datenbank geschrieben.

Bei meinem Problem handelt es sich um folgendes.
Diese Abfrage soll nur Beiträge zählen die in Foren geschrieben sind, welche nicht in einem Array aufgeführt sind.

d.h. Ich habe ein Array, welches ich vor der Abfrage generiere und so aussehen könnte:

spc_id = [3,4];

Alle Foren die nicht in diesem Array sind können für die Zählung herangezogen werden, aber nicht die die in diesem Array stehen.

Gibt es eine Möglichkeit den SQL Befehl derart anzupassen das dieses Problem gelöst wird?

Danke schon mal im vorraus für eure Hilfe

Grüße
Daimonion

 
asp2php
12-04-2007, 18:04 
 
Original geschrieben von daimonion

Gibt es eine Möglichkeit den SQL Befehl derart anzupassen das dieses Problem gelöst wird?
und wie immer bekommt man von mir bei solchen Fragen immer ein einfaches:

Ja

 
hhcm
12-04-2007, 19:37 
 
Wie wäre es mit "AND NOT IN" an der richtigen stelle.. Damit lässt sich bei Google & Co ne menge finden.

 
daimonion
13-04-2007, 15:37 
 
@asp2php

Wieso denn nur ein ja und nicht eventuell ne einfach Erklärung wo man da ansetzen könnte?

@hhcm

Danke für den Tipp.

Jetzt brauch ich erst mal nur noch begreifen was das SQL statement genau macht um dann herauszufinden wo ich eventuell die Bedingung reinsetzen muß. ;)

Ich bin noch nicht wirklich fit mit diesen inneren Abfragen.

INNER JOIN " . POSTS_TABLE . " p ON u.user_id = p.poster_id

Ich denke mal hier werden alle Beiträge gezählt die die userid geschrieben hat, oder?

Ergo könnte dort ja auch das "AND NOT IN" hinein?!

Danke für eure Tipps

Grüße
Daimonion

 
schmalle
13-04-2007, 17:57 
 
Das: u.user_id <> " . ANONYMOUS . "

ersetzen durch: u.user_id NOT IN( ".implode(',', $array).")

Denk dran an der passende Stelle darauf zu achten, dass in Deinem Array auch was drin ist. Sonst gibbet lustige Fehler ;-)

 
daimonion
06-07-2007, 18:06 
 
So, nach langem Warten möcht ich hier nochmal antworten.

@schmalle.

Danke für den Tipp, werd ich mal so ausprobieren und berichten. Hoffe das dauert nicht wieder so lange.. ;)


Edit:

So, habe es geschafft... Hier nochmal der Vollständigkeit halber der geänderte Code

//no post count mod
//count only posts which are not in these forum_ids
$npc_id = $board_config['no_post_count_forum_id'];
$npc_id = explode(",",$npc_id);
$npc_str="";
foreach ($npc_id as $str) {
$npc_str .= " AND NOT p.forum_id = ". $str ." ";
}


// Updating new pm counter
if (check_mysql_version())
{

$sql = "SELECT u.user_id, u.username, u.user_posts, Count(p.post_id) AS new_counter
FROM " . USERS_TABLE . " u
INNER JOIN " . POSTS_TABLE . " p ON u.user_id = p.poster_id
WHERE u.user_id <> " . ANONYMOUS . $npc_str ."
GROUP BY u.user_id, u.username, u.user_posts";
}
else
{

$sql = "SELECT u.user_id, u.username, u.user_posts, Count(p.post_id) AS new_counter
FROM " . USERS_TABLE . " u, " .
POSTS_TABLE . " p
WHERE u.user_id = p.poster_id
AND u.user_id <> " . ANONYMOUS . $npc_str ."

GROUP BY u.user_id, u.username, u.user_posts";
}


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:38 Uhr.