php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.04.2007, 09:49  
Erfahrener Benutzer
 
Benutzerbild von JEGO
 
Registriert seit: 01.12.2003
Beiträge: 2.555
PHP-Kenntnisse:
Anfänger
JEGO wird schon bald berühmt werden
Standard order by rand()

Hallo zusammen,

ich habe folgendes kleines Problem. Ich lese eine Tabelle mit order by rand() aus. soweit so gut. durch eine Blätterfunktion wird die Ausgabe jedoch auch mit jedem weiter blättern neu sortiert.

Mein Ziel ist es, ein mal zu mischen mit rand() und diese Mischung für diese Sitzung (session) beizubehalten. (auch beim blättern.) damit durch das blättern nicht zufällig datensätze ausgelassen oder Doppelt angezeigt werden.

Hat da jemand eine Idee wie ich das anstellen kann?

beispiel wie ich es zur Zeit habe:
PHP-Code:
        
$sql 
"SELECT * FROM tabelle ORDER BY rand()";
$query sprintf("%s LIMIT %d, %d"$sql$sr$mr);
$res mysql_query($query$con) or die(mysql_error());
$row mysql_fetch_assoc($res); 
live zusehen hier:
http://www.24tourist.at/index.php?s=...mer&l=de&rem=0
__________________
Gruß JEGO

Ein PHP Script tut, was Du schreibst, nicht was Du willst.
JEGO ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.04.2007, 10:00  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Wird so net klappen, da die Session eine PHP-Funktion ist und mit MySQL in der Form nicht kombinierbar. Was möglich sein müsste ist, dass du einmal komplett ausliest ("durchmischt"), was du ja eh machst (ist zum Blättern eigentlich ungünstig...) und dann die zurück gegebene Ressource in die Session packst.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 24.04.2007, 10:07  
Erfahrener Benutzer
 
Benutzerbild von JEGO
 
Registriert seit: 01.12.2003
Beiträge: 2.555
PHP-Kenntnisse:
Anfänger
JEGO wird schon bald berühmt werden
Standard

@KingCrunch

danke für die Antwort.

Ich hab mir schon überlegt, ob ich mir ein Cron einrichte der alles einmal mischt, und das von mir aus jede stunde. jedoch find ich das mit jedem Seitenaufruf besser.

Also wenn ich dich richtig verstehe, erste mysql Abfrage Mischt.
die zweite nimmt das Ergebnis und gibt anhand der obigen mischung aus.
Jedoch steh ich da vor einem Rätzel, wie übergebe ich das am sinvollsten?

Wie würdest du das machen?

Edit

jetzt versteh ich erst was du meinst. jedoch überlege dir wieviel ich da in die Session schreiben müste bei später mal um die 1000 Einträgen und 97 Spalten in der Tabelle.

ich dachte eher daran das ich mir nur die gemischten ID´s in die session schreibe und an hand dieser dann ausgebe. jedoch scheiter ich an der Übergabe der ID´s in der Session an die mysql abfrage.

greets JEGO
__________________
Gruß JEGO

Ein PHP Script tut, was Du schreibst, nicht was Du willst.
JEGO ist offline  
Alt 24.04.2007, 11:49  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Das ginge sicher auch, wird aber algorithmisch aufwendiger, weil du
a) erstmal die ids in der von dir gewollten Reihenfolge abfragen musst und
b) später jede id wieder einzeln aus der db auslesen musst.

Das Problem ist, dass du die neue Sortierung nicht so einfach an deine Tabelle binden kannst. Eine Möglichkeit wäre es allerdings auch (kommt mir grad in den Sinn), dass du eine neue Spalte "sort" oder sowas einrichtest, in der du (numerisch) die Position in der gemischten Sortierung schreibst. Bei der nächsten Abfrage könntest du dann einfach die Sortierung per ORDER BY sort wiederherstellen. Dies wäre dann allerdings benutzerübergreifend (also alle Benutzer bekommen die selbe, wenn auch durchmischte Reihenfolge) und ich weiß nicht, ob das so von dir gedacht war ^^
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 24.04.2007, 11:54  
Erfahrener Benutzer
 
Benutzerbild von JEGO
 
Registriert seit: 01.12.2003
Beiträge: 2.555
PHP-Kenntnisse:
Anfänger
JEGO wird schon bald berühmt werden
Standard

hmmm... das ist ne gute Idee.

ich schau mir das mal an. Danke :wink:
__________________
Gruß JEGO

Ein PHP Script tut, was Du schreibst, nicht was Du willst.
JEGO ist offline  
Alt 24.04.2007, 12:56  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von KingCrunch
dass du eine neue Spalte "sort" oder sowas einrichtest, in der du (numerisch) die Position in der gemischten Sortierung schreibst.
den gedanken kann man ja weiterführen und statt einer spalte eine zusätzliche tabelle "bla_sorting (user_id, object_id, sort)" hernehmen, womit man dann per
Code:
LEFT JOIN bla_sorting ON (bla_sorting.object_id = xyz.id AND user_id=?) ORDER BY bla_sorting.sort ASC
das ganze relativ effizient mehrbenutzerfähig gestaltet
axo ist offline  
Alt 24.04.2007, 13:18  
Erfahrener Benutzer
 
Benutzerbild von JEGO
 
Registriert seit: 01.12.2003
Beiträge: 2.555
PHP-Kenntnisse:
Anfänger
JEGO wird schon bald berühmt werden
Standard

@axo danke für den Tipp schau ich mir auch mal an.

@KingCrunch

hab mal eine Spalte angelegt (nummerisch) und ändere diese wia Cron alle 15min.
Die Ausgabe wird nach der Spalte sortiert.
Das Skript funktioniert scheinbar gut (teste noch).

Danke Für eure Hilfe :wink:
__________________
Gruß JEGO

Ein PHP Script tut, was Du schreibst, nicht was Du willst.
JEGO ist offline  
Alt 24.04.2007, 19:40  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

oder du machst dir die Tatsache zunutze, daß RAND() bei MySQL auch mit einem Parameter bestückt werden kann mit dessen Hilfe du den "Zufall" steuern kannst.

Hier würde sich dann ORDER BY RAND(SessionId) anbieten.

Die "zufälllige" Sortierung bleibt dann für die gesamte Session erhalten.
DiBo33 ist offline  
Alt 24.04.2007, 21:32  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Interessante Lösung. Danke für die Info wusste ich noch nicht.
Flor1an ist offline  
Alt 25.04.2007, 10:54  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von DiBo33
oder du machst dir die Tatsache zunutze, daß RAND() bei MySQL auch mit einem Parameter bestückt werden kann mit dessen Hilfe du den "Zufall" steuern kannst.

Hier würde sich dann ORDER BY RAND(SessionId) anbieten.

Die "zufälllige" Sortierung bleibt dann für die gesamte Session erhalten.
Das steuert aber nur die Zufallsgenierung, aber das sorgt nicht dafür, dass die "Zufallszahl" im Rahmen der Session identisch bleibt. Ergo hätte er zwar ne feste Folge von Zufallszahlen, aber bei jedem Aufruf trotzdem eine andere (solange bis sich eben die Folge wiederholt ).
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage mit count, order by, group by...und Probleme BartTheDevil89 Datenbanken 2 15.06.2008 13:34
ORDER BY im Subquery cycap Datenbanken 12 31.10.2007 20:31
Abfrage = "SELECT * FROM links ORDER BY id" Taktaky PHP Tipps 2008 2 22.08.2007 14:37
HTML/CSS: Gitternetz-Tabelle, selektierte Zellen Zergling-new Tutorials 0 06.07.2007 19:53
mysql RAND() != php rand()? benpicco Datenbanken 4 30.07.2006 23:10
Problem mit Ausgabe bzw. Abfrage mit ORDER BY mayer Datenbanken 7 02.07.2006 21:45
order by erweiterung . frage zum verst�ndnis... Promaetheus Datenbanken 5 07.12.2005 14:26
COUNT (*) AS und ORDER BY RAND() JEGO PHP Tipps 2007 4 25.11.2005 11:10
Rand BEGINNER-L HTML, Usability und Barrierefreiheit 6 02.10.2005 17:43
SELECT tbl.col AS a ORDER BY tbl.a versionsabhängig? axo Datenbanken 3 15.04.2005 15:50
Fehler im Script (evtl. rand() ) horvath-media PHP Tipps 2005 2 31.03.2005 14:25
Syntaxfehler, wohin kommt ORDER BY PHP Tipps 2005 7 12.02.2005 13:21
[Erledigt] mysql zufallswert Datenbanken 2 01.11.2004 10:23
DISTINCT oder ORDER BY unknownsoul Datenbanken 5 20.08.2004 12:12
[Erledigt] Skandal: rand() getürkt? Off-Topic Diskussionen 4 06.06.2004 22:54

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
order by rand, order by rand(), update order by rand, php order by rand(), order by rand php, order by rand() php, order by rand sortieren, mysql rand parameter, php order by rand, php order by random, besser als order by rand, order rand, sort by rand, orderby = rand(), order by rand (), order by rand() aber sortiert, php liste blättern, order by rand beispiel, order by rand() sortieren, select abfrage jede stunde mischen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.