Statistik |
Beiträge: 144.530 (Täglich: 19,19 )
Themen: 16.700
Mitglieder: 13.209
Neuestes Mitglied: zitronentee.
Ausl. d. letzten Minute: 146%
Ausl. d. letzten 5 Minuten: 137%
Ausl. d. letzten 15 Minuten: 193%
Aktulle Uhrzeit: 13:03
Freier Webspace: 4.04 TB
PHP-Version: 7.4.33
|
|
|
|
|
Daten per Zufall aus der DB? |
|
Daten per Zufall aus der DB? |
|
Guten Morgen.
Wie schaffe ich es das per Zufall ein Eintrag aus der DB gefischt wird?
Natürlich aus einer bestimmten Tabelle.
Folgendes habe ich vor:
Ich habe heute Nacht ein kleines Script für das ACP gemacht, dort kann man seine Witze, Sprüche oder sonstige Texte in die DB laden.
Wie ist es mir jetzt möglich das er immer einen Zufallswitz auswählt?
Ich habe auch schon meine Bücher gewältzt aber ich glaube ich bin zu müde um noch was zu finden.
Ich danke schon mal für einen Hinweis.
|
|
16.04.2006 07:34 |
|
|
|
Erst die Tabelle auszählen wie viele Datensätze sie hat,
Dann ein Random machen das eine Zahl von 0 bis Maximum Datensätze auswirft.
Und anschliessend eine Simple Select-Abfrage mit nem Limit das eine bestimmte Datensatzzahl (das Random) und nur EIN Datensatz genommen wird.
SELECT * from tabelle LIMIT $random,1
|
|
16.04.2006 09:26 |
|
|
keine_Ahnung
...versucht aber sein bestes.
Zeige keine_Ahnung auf Karte
Dabei seit: 23.11.2005
Beiträge: 1.958
5 Filebase-Einträge
Alter: 46 Jahre
Herkunft: Bad Lippspringe wBB-Version: wBB3.X PHP-Version: 5.2.6 MySQL-Version: 5.0.26 Wo bist du gehostet?: Bei mir selbst!
Bewertung:
Level: 51 [?]
Erfahrungspunkte: 13.118.970
Nächster Level: 13.849.320
Themenstarter
|
|
OK, das werde ich wohl hin bekommen.
Später, wenn ich richtig wach bin.
Ich danke dir.
|
|
16.04.2006 14:12 |
|
|
|
Es geht noch einfacher. Ih habs jetzt nicht ausprobiert, sollte aber klappen:
select * from tabelle limit rand(),1
|
|
16.04.2006 14:48 |
|
|
keine_Ahnung
...versucht aber sein bestes.
Zeige keine_Ahnung auf Karte
Dabei seit: 23.11.2005
Beiträge: 1.958
5 Filebase-Einträge
Alter: 46 Jahre
Herkunft: Bad Lippspringe wBB-Version: wBB3.X PHP-Version: 5.2.6 MySQL-Version: 5.0.26 Wo bist du gehostet?: Bei mir selbst!
Bewertung:
Level: 51 [?]
Erfahrungspunkte: 13.118.970
Nächster Level: 13.849.320
Themenstarter
|
|
|
16.04.2006 15:11 |
|
|
|
Entweder du probierst es mal so wie Fornax schrieb, oder auf meine Weise etwa so:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
$insgesamt = $db->query_first("SELECT count(*) from bb".$n."_witze");
//$insgesamt[0] = Anzahl aller Einträge
$zufall = rand(0,$insgesamt);
//schau ma unter www.php.net kann sein das du mit mt_rand oder so erst initialisieren musst
$zufallswitz = $db->query_first("SELECT * FROM bb".$n."_witze LIMIT $zufall,1");
//kann auch LIMIT 1,$zufall sein, weiß ich grad nich genau. Anschliessend haste alle in Zufallswitz gespeicherten Felder dieses Zufällig gewählten Datensatzes. |
|
Gruß
HAWK[eye]
|
|
16.04.2006 17:20 |
|
|
keine_Ahnung
...versucht aber sein bestes.
Zeige keine_Ahnung auf Karte
Dabei seit: 23.11.2005
Beiträge: 1.958
5 Filebase-Einträge
Alter: 46 Jahre
Herkunft: Bad Lippspringe wBB-Version: wBB3.X PHP-Version: 5.2.6 MySQL-Version: 5.0.26 Wo bist du gehostet?: Bei mir selbst!
Bewertung:
Level: 51 [?]
Erfahrungspunkte: 13.118.970
Nächster Level: 13.849.320
Themenstarter
|
|
So Problem gelöst.
Mein Code sieht jetzt so aus:
php: |
1:
2:
3:
4:
5:
6:
7:
|
$rechnen = $db->query("SELECT * From bb".$n."_witze ORDER BY rand() LIMIT 1, 1");
while ($gesamt = $db->fetch_array($rechnen))
{
$zufall = $gesamt['witz'];
eval ("\$witze_acp_zufall_bit .= \" ".$tpl->get("witze_acp_zufall_bit",1). "\";");
} |
|
|
|
16.04.2006 19:31 |
|
|
|
Bin über die SuFu hierher gestoplert und da ich eine ähnliche Frage habe, schließe mich mal an ...
Ich würde gerne einem User die Möglichkeit anbieten, das seine Signatur zufällig aus einer Liste mit mehreren Texten ausgelesen wird, bei ihm unter seinen Beiträgen, im Profil und bei den PNs immer eine andere Signatur steht.
Ist das überhaupt möglich und wenn Ja, wie ... ?
Die Tabelle mit den unterschiedlichen Signaturtexten bekomme ich hin, aber bekomme ich das Forum dazu, das es bei dem einem User einen Wert aus dieser Tabelle zufällig als Signatur ausspuckt ... ?
Vielen Dank für jede Hilfe ... !!!
__________________
|
|
09.06.2007 15:48 |
|
|
|
du legst dir selber ne Tabellen an und willst das Feature dann quasi nur unter deinen Posts haben?
__________________ Gruss Mannes
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
|
09.06.2007 16:23 |
|
|
|
öffne die thread.php
suche nach
php: |
1:
2:
|
function makePostBit($posts, $count, $indentwidth = 0) {
global $db, $url2board, $thread, $board, $tpl, $wbbuserdata, $style, $lang, $session, |
|
ersetze dies durch
php: |
1:
2:
|
function makePostBit($posts, $count, $indentwidth = 0) {
global $n, $db, $url2board, $thread, $board, $tpl, $wbbuserdata, $style, $lang, $session, |
|
Also quasi das "$n, " nach global eingefügt...
suche weiter nach
php: |
1:
2:
3:
4:
|
if ($posts['showsignature'] == 1 && !$posts['disablesignature'] && $wbbuserdata['showsignatures'] == 1 && $posts['signature']) {
$posts['signature'] = $this->parse->doparse($posts['signature'], $posts['allowsigsmilies'], $posts['allowsightml'], $posts['allowsigbbcode'], $posts['allowsigimages']);
eval("\$signature = \"".$tpl->get("thread_signature")."\";"); |
|
und ersetze dies durch
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
if ($posts['showsignature'] == 1 && !$posts['disablesignature'] && $wbbuserdata['showsignatures'] == 1 && $posts['signature']) {
$z = $db->query("SELECT * from bb".$n."_usersignatures WHERE userid = ".$posts['userid']." ORDER BY RAND() LIMIT 0, 1");
$zufall = "";
while ($z_info = $db->fetch_array($z)) {
$zufall = $z_info['signature'];
}
if ($zufall != ""){
$posts['signature'] = $zufall;
}
$posts['signature'] = $this->parse->doparse($posts['signature'], $posts['allowsigsmilies'], $posts['allowsightml'], $posts['allowsigbbcode'], $posts['allowsigimages']);
eval("\$signature = \"".$tpl->get("thread_signature")."\";"); |
|
führe nun noch folgenden SQL-code aus (das bb1 evtl. vorher anpassen)
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
CREATE TABLE `bb1_usersignatures` (
`id` INT( 16 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`userid` INT( 8 ) NOT NULL DEFAULT '0',
`signature` TEXT NOT NULL
) ENGINE = MYISAM ;
ALTER TABLE `bb1_usersignatures` ADD INDEX ( `userid` );
INSERT INTO `bb1_usersignatures` ( `id` , `userid` , `signature` )
VALUES (
'1', '1', 'Jeder ist seines Glückes Schmied. Aber nicht jeder hat ein schmuckes Glied.'
), (
NULL , '1', 'Jedem das seine, mir das meiste.'
); |
|
Nun kannst du irgendwie dafür sorgen, das diese Tabelle gefüllt wird. Mit phpmyadmin kannste z.b. easy Datensätze anlegen.... du kannst hier also das ganze für jeden User machen. WENN in der Tabelle zu diesem User irgendwelche Datensätze vorhanden sind, dann wird die aktuelle signatur durch diesen Inhalt ersetzt. Gibt es bei User x z.b. keine Datensätze in der Tabelle so wird bei ihm seine gewohnte signatur aus dem Profil gezeigt.
Hope it helps... Ach ja: Demo kannste HIER sehen. Ich, donManfred, habe in meiner signatur eigentlich "---" eingetragen.
__________________ Gruss Mannes
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
|
09.06.2007 16:54 |
|
|
|
|
Zitat: Original von keine_Ahnung
So Problem gelöst.
Mein Code sieht jetzt so aus:
php: |
1:
2:
3:
4:
5:
6:
7:
|
$rechnen = $db->query("SELECT * From bb".$n."_witze ORDER BY rand() LIMIT 1, 1");
while ($gesamt = $db->fetch_array($rechnen))
{
$zufall = $gesamt['witz'];
eval ("\$witze_acp_zufall_bit .= \" ".$tpl->get("witze_acp_zufall_bit",1). "\";");
} |
|
|
|
|
Auch, wenn du es vermutlich schon längst geändert haben solltest (der thread ist ja schon was älter aber er wurde ja hervorgeholt da fand ich das nun)... LIMIT 1,1 liefert Dir immer den ZWEITEN Datensatz. Wenn es nur einen witz in der DB geben würde, dann würde dieser mit deinem code NICHT gelistet werden. Das kannste nur mit LIMIT 0,1 erreichen. Würde auch an der funktionalität nichts ausmachen. rand() macht weiter wie gewohnt. Nur würde es auch klappen, wenn nur ein Datensatz existiert.
__________________ Gruss Mannes
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
|
09.06.2007 16:58 |
|
|
keine_Ahnung
...versucht aber sein bestes.
Zeige keine_Ahnung auf Karte
Dabei seit: 23.11.2005
Beiträge: 1.958
5 Filebase-Einträge
Alter: 46 Jahre
Herkunft: Bad Lippspringe wBB-Version: wBB3.X PHP-Version: 5.2.6 MySQL-Version: 5.0.26 Wo bist du gehostet?: Bei mir selbst!
Bewertung:
Level: 51 [?]
Erfahrungspunkte: 13.118.970
Nächster Level: 13.849.320
Themenstarter
|
|
für deine Verbesserung.
Ich muss zugeben mich nicht mehr damit beschäftigt zu haben, deswegen stand es bei mir immer noch mit 1,1
Habe es aber nun in 0,1 geändert und werde es auch bald wieder brauchen, danke dir für deinen Ratschlag.
Bei sollen bald "Schon gewusst?" Tipps im Forum auftauchen.
Ein paar Tipps habe ich auch schon in der DB und bald sollen sie natürlich ber Zufall ausgesucht werden.
nochmal.
Gruß Heiko
|
|
09.06.2007 17:15 |
|
|
|
Interesse daran, das das jeder User für sich selber einstellen kann?
__________________ Gruss Mannes
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
|
09.06.2007 17:17 |
|
|
keine_Ahnung
...versucht aber sein bestes.
Zeige keine_Ahnung auf Karte
Dabei seit: 23.11.2005
Beiträge: 1.958
5 Filebase-Einträge
Alter: 46 Jahre
Herkunft: Bad Lippspringe wBB-Version: wBB3.X PHP-Version: 5.2.6 MySQL-Version: 5.0.26 Wo bist du gehostet?: Bei mir selbst!
Bewertung:
Level: 51 [?]
Erfahrungspunkte: 13.118.970
Nächster Level: 13.849.320
Themenstarter
|
|
Danke, aber damit habe ich keine Schwierigkeiten.
Habe gerade noch einen Newsticker bei mir in den Header gebaut wo Mitglieder einfach nur auf die Grafik klicken müssen und der Newsticker wird nicht mehr angezeigt.
Für die "Schon gewusst?" Tipps ist folgendes geplannt:
- An und Ausschaltbar
- Gruppen bezogene Tipps
- bei jeden Seitenaufruf ein neuer Tipp
Das mit den Seitenaufrufen ist noch so ein Problem bei mir, habe im Monat im Schnitt 2.000.000 Seitenaufrufe. Jetzt stell dir mal vor wie viele Tipps ich da bräuchte damit es nicht schnell langweilig wird.
Aber das kriege ich auch noch hin.
|
|
09.06.2007 17:22 |
|
|
|
Hört sich gut an
__________________ Gruss Mannes
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
|
09.06.2007 17:31 |
|
|
|
@ DonManfred
Superklasse, vielen, vielen Dank !!!
Gibt es vielleicht auch noch die Möglichkeit, das die User selbst in ihrem UserCP mehrere Alternativsignaturen eintragen können, so das der "harte Weg" über SQL-Abfragen durch den Admin nicht nötig wäre ... ?
Quasi ein Engabeformular, mit dem jeder die Tabelle bb1_usersignatures selbst füllen kann ... ?
Ist ja dann fast schon ein richtiger (, kleiner) Hack ...
__________________
|
|
09.06.2007 19:31 |
|
|
|
Ich muss jetzt doch noch einmal nachfragen, weil ich immer folgende Fehlermeldung erhalte:
|
Zitat: Fatal error: Call to a member function on a non-object in /www/htdocs/w006082f/hemadios/board/thread.php on line 321 |
|
|
In Zeile 321 meiner thread.php steht folgendes:
php: |
1:
|
$z = $db->query("SELECT * from bb".$n."_usersignatures WHERE userid = ".$posts['userid']." ORDER BY RAND() LIMIT 0, 1"); |
|
in folgender Codeumgebung:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
if ($posts['showsignature'] == 1 && !$posts['disablesignature'] && $wbbuserdata['showsignatures'] == 1 && $posts['signature']) {
$z = $db->query("SELECT * from bb".$n."_usersignatures WHERE userid = ".$posts['userid']." ORDER BY RAND() LIMIT 0, 1");
$zufall = "";
while ($z_info = $db->fetch_array($z)) {
$zufall = $z_info['signature'];
}
if ($zufall != ""){
$posts['signature'] = $zufall;
}
$posts['signature'] = $this->parse->doparse($posts['signature'], $posts['allowsigsmilies'], $posts['allowsightml'], $posts['allowsigbbcode'], $posts['allowsigimages']);
eval("\$signature = \"".$tpl->get("thread_signature")."\";");
} |
|
Anmerken muss ich noch, das ich die zu ersetzende Stelle in der thread.php so nicht gefunden habe.
Deshalb habe ich das "$n, " an folgender Stelle eingefügt:
php: |
1:
2:
3:
4:
|
function makePostBit($posts, $count, $indentwidth = 0) {
global $guthaben;
global $n, $thread, $board, $tpl, $wbbuserdata, $style, $lang, $session, $userratings, $showuserratinginthread, $showuserlevels, $showonlineinthread, $useronlinetimeout, $showregdateinthread, $showuserfieldsinthread, $showgenderinthread, $showavatar, $_GET, $showthreadstarter, $showuserpostsinthread, $allowsigsmilies, $allowsightml, $allowsigbbcode, $max_sig_image, $authormarking, $picmaxwidth, $picmaxheight, $allowflashavatar, $thumbnailsperrow, $SID_ARG_1ST, $SID_ARG_2ND, $SID_ARG_2ND_UN;
if ($this->userfieldcache) reset($this->userfieldcache); |
|
Was habe ich falsch gemacht ... ?
__________________
|
|
10.06.2007 11:22 |
|
|
|
Welche Boardversion hast Du?
__________________ Gruss Mannes
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
|
10.06.2007 17:16 |
|
|
|
php: |
1:
2:
3:
|
function makePostBit($posts, $count, $indentwidth = 0) {
global $guthaben , $n, $db, $thread, $board, $tpl, $wbbuserdata, $style, $lang, $session, $userratings, $showuserratinginthread, $showuserlevels, $showonlineinthread, $useronlinetimeout, $showregdateinthread, $showuserfieldsinthread, $showgenderinthread, $showavatar, $_GET, $showthreadstarter, $showuserpostsinthread, $allowsigsmilies, $allowsightml, $allowsigbbcode, $max_sig_image, $authormarking, $picmaxwidth, $picmaxheight, $allowflashavatar, $thumbnailsperrow, $SID_ARG_1ST, $SID_ARG_2ND, $SID_ARG_2ND_UN;
if ($this->userfieldcache) reset($this->userfieldcache); |
|
Also irgendwie habe ich $db in deiner Globalzeile vermisst. Und das vom guthaben kann da mit in die eine Zeile rein... Probiers mal mit diesem Code hier
__________________ Gruss Mannes
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
|
10.06.2007 17:40 |
|
|
|
|
Zitat: Original von DonManfred
Probiers mal mit diesem Code hier |
|
|
Merci, funzt nun wunderprächtig, vielen, vielen Dank ... !!!
(Hier mal ein kleines Beispiel, wie das ganze bei mir nun aussieht.)
__________________
|
|
10.06.2007 22:28 |
|
|
|
|
|
|