ThWboard Support-Forum (Archiv)

Ort: / Boardübersicht / PHP / MySQL Probleme / Problem mit Order by rand()


Seite 1 von 1

java0986 schrieb am 09.11.2003 um 16:42 Uhr

hallo,

um es kurz zu fassen, mein Codeschnipsel:

$abfrage = "SELECT * FROM `$banner_table` WHERE status = '1' AND art = 'Non-Erotik' ORDER BY rand() LIMIT 1";
$abfrage_do = mysql_query($abfrage);
while ($row = mysql_fetch_object($abfrage_do)) {

if($row->is_code == "true"){
$count=$row->adviews + 1;
echo $row->bannercode;
if (ipcheck($REMOTE_ADDR)==true){
$update = "UPDATE `$banner_table` SET adviews = '$count' WHERE id=$row->id";
$update_do = mysql_query($update);
}
}

Das Problem ist, dass bei bestimmten PHP oder MySQL Versionen bei dieser Abfrage immer NUR der allererste Banner angezeigt wird.
Standardmäßig funktioniert die Rotation einwandfrei, sodass die Banner wechseln.
Gibt es vielleicht irgendeine Funktion die bei php oder apache aktiviert oder deaktiviert sein muss, damit dies funktioniert?

vielen Dank im Vorraus!
java0986

Shadow schrieb am 09.11.2003 um 21:33 Uhr

irgendwie gibst du bei rand garkeine min, max parameter an. Auserdem ist es bei älteren php Versionen nötig rand erstmal zu intialisieren. Mit srand();

vesuch das so mal:

$query   = mysql_query("SELECT * FROM ".$banner_table." WHERE status='1' AND art='Non-Erotik' ORDER BY ASC";
$anzahl = mysql_num_rows($query);
srand();
$rand = rand(1, $anzahl);


for($i=1; $i=$rand; $i++) {
while ($row = mysql_fetch_array($query)) {
$bannecode = $row['bannercode'];
}
}
echo $bannercode;

bdominik schrieb am 09.11.2003 um 22:00 Uhr

Naja, shadow, dein Code kann eher nicht funktionieren. Erst limitierst du das ergebmiss mit 1, dann fragste wieder ab, wieviel denn jetzt da ist. Da will ich wetten, das $anzahl immer 1 enthält.

Tendor schrieb am 09.11.2003 um 22:41 Uhr

java0986 postete
Das Problem ist, dass bei bestimmten PHP oder MySQL Versionen bei dieser Abfrage immer NUR der allererste Banner angezeigt wird.
Standardmäßig funktioniert die Rotation einwandfrei, sodass die Banner wechseln.
Gibt es vielleicht irgendeine Funktion die bei php oder apache aktiviert oder deaktiviert sein muss, damit dies funktioniert?

"ORDER BY RAND()" geht ab mysql >= 3.23

(siehe
http://www.mysql.com/doc/en/Mathematical_functions.html)

gruß

java0986 schrieb am 09.11.2003 um 22:50 Uhr

also wenn ich das richtig verstehe reicht es eigentlich, wenn ich srand(); über den code schreibe oder gibt es dann mit neueren Versionen konflikte? Wenn das nicht geht, wie löse ich dieses Problem dann für Benutzer mit mysql < 3.23?

Jürgen S. schrieb am 10.11.2003 um 10:00 Uhr

das PHP und MySQL arbeitet Serverseitig! Das heißt es ist Benutzerunabhängig. Es liegt einzig und allein daran, was auf dem Server installiert ist.

Shadow schrieb am 10.11.2003 um 15:31 Uhr

bdominik postete
Naja, shadow, dein Code kann eher nicht funktionieren. Erst limitierst du das ergebmiss mit 1, dann fragste wieder ab, wieviel denn jetzt da ist. Da will ich wetten, das $anzahl immer 1 enthält.

naja. nich so nen Aufstand! :P. Einfach limit 1 löschen. Naja hatte eben sein sql query kopiert. Aber ich denke jeder einigermaßen aufgeweckte mensch sieht sowas ;)

edit: JürgenS. das stimmt leider nicht ganz. Ich hatte schon nen Script das auf manchen PCs wenn man es aufgeruft hat immer ne weiße Seite angezeigt hat. Auf anderen PCs konnte man es Problemlos aufrufen.

Zum schluss wars nen exit das ich in ner if Bedingung "vergessen" hatte. Wenn alles aber zu 100% Serverbedingt wäre hätte es a) garnicht gehen dürfen b) immer gehen müssen.

Vorallem das exit war eigentlich nicht wirklich nötig.

bdominik schrieb am 10.11.2003 um 15:33 Uhr

auf jeden fall geht shadows lösung, wenn gleich, man sie ein bischen optimieren könnte! Nur noch den einen Datensatzt selecten!

Shadow schrieb am 10.11.2003 um 15:37 Uhr

Ja, das ist klar :). Nur ich hab doch keine Ahnung welche Datensätze er benötigt. War ja nur ein Beispiel. Ich denke mit dem Beispiel sollte es möglich sein sich das für seine Zwecke 100% angepasste Script zu schreiben. - Aber gut das du das nochmal erwähnst, nachher hätte ers so gelassen und das hätte unnötiger Traffic und Serverlast bedeutet.

Seite 1 von 1