php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.04.2005, 13:15  
Gast
 
Beiträge: n/a
Standard [Erledigt] Zufällig eine Zeile auslesen

Hallo hallo!

Ich hab ne Frage:
Wie kann ich bei mySQL zufällig eine Zeile auslesen. Also ich habe eine Tabelle mit Usernamen und möchte eine Zeile zufällig auswählen und da den Usernamen rausnehmen / auslesen.

Ich weiss, dass es da Order by Rand gibt, aber das soll nicht zuverlässig sein. Gibts da was anderes?
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 09.04.2005, 13:46  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

was ist daran nicht zuverlässig?
http://www.php-faq.de/q/q-mysql-zufall.html
robo47 ist offline   Mit Zitat antworten
Alt 09.04.2005, 13:48  
Gast
 
Beiträge: n/a
Standard

Dazu folgender Link:
http://<br /> <a href="http://dev.m...html</a><br />
D.h. welche mysql Version benutzt du?
  Mit Zitat antworten
Alt 09.04.2005, 14:42  
Gast
 
Beiträge: n/a
Standard

Keine Ahnung, fin dich nirgends... Naja, ich versuchs dann mal Danke für die Tips!
  Mit Zitat antworten
Alt 09.04.2005, 15:19  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
<?php
echo "phpinfo()";

?>
  Mit Zitat antworten
Alt 09.04.2005, 15:23  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

liefert nur die client-version von mysql und hat nichts damit zu tun was auf dem mysql-server läuft.
am besten beim hoster informieren.

mfg
robo47
robo47 ist offline   Mit Zitat antworten
Alt 09.04.2005, 16:32  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

die abfrage ORDER BY RAND() ist wirklich nicht zuverlässig, wenn es darum geht, 'echt zufällige' ergebnisse zurückzubekommen. und zwar deswegen, weil mysql oft ergebnisse auf seiten im primärspeicher hält und dadurch zufallsergebnisse, die eigentlich immer vom sekundärspeicher kommen sollten, nicht echt zufällig ausgewählt werden. das hatte ich mal bei einer bildergalerie, die als einstiegsbild von ca. 10.000 bildern immer ein zufälliges rausholt. dort kamen mit ungewöhnlicher häufigkeit immer die selben bilder zurück.

workaround:

PHP-Code:

$sql 
'SELECT COUNT(*) as num FROM users';
$num = ...
$random rand(0,$num);
$sql 'SELECT id FROM users LIMIT ' $random ', 1'
... ist ebenfalls echt zufällig, aber mit einer zusätzlichen abfrage
axo ist offline   Mit Zitat antworten
Alt 09.04.2005, 21:39  
Gast
 
Beiträge: n/a
Standard

Ich habe gerade ein kleines Testscript zusammengeschustert. Der auskommentierte Teil ist zum erzeugen grösserer Datenmengen gedacht. Die Ergebnisse auf meinem lokalen Linux-Rechner erscheinen mir plausibel und relativ unabhangig von der Datenmenge sowie davon, ob man pro select nur einen Eintrag nimmt oder mehrere.
Sowol phpinfo als auch der status-befehl auf der mysl-Konsole sagen Version 4.0.20.

PHP-Code:
<?php
//Test zur Funktion von "... ORDER BY rand()"
//lieber nur auf lokalem Server ausfueren !!!
//Datenbankverbindung
$myLink mysql_connect("localhost","","")
          or die(
"Keine Verbindung zu MySql");
mysql_select_db('') or die("konnte stream nicht wählen");
//Dummy-Daten erzeugen
$data "";
/* Vorsicht !!!
for ($i = 1;$i < 1000; $i++) {
   $data .= "0123456789abcdefghijklmnopqrstuvwxyz";
};
*/
//Test - Daten in Tabelle einfuegen
for ($i 1$i 1000$i++) {
  
$query "insert into test (nr, data) values ($i, '$data')";
  
$result mysql_query($query) or die("Query ($query) failed: " mysql_error());
};

//wieviele Zeilen in Tabelle?
$query "select count(*) as count from test";
$result mysql_query($query) or die("Query ($query) failed: " mysql_error());
$line mysql_fetch_array($resultMYSQL_ASSOC);
$count $line['count'];

//zuruecksetzen Statistik-Array
for ($i 1$i $count$i++) {$stat[$i] = 0;};

//Test 
$query "SELECT nr
                FROM test 
                ORDER BY rand() limit 10"
;    
        
for (
$i 1$i 100$i++) {
  
$result mysql_query($query) or die("Query ($query) failed: " mysql_error());
  while (
$line mysql_fetch_array($resultMYSQL_ASSOC)) {
      
$stat[$line['nr']]++;     
  };
};

//zaehle wie viele verschiedene Treffer
$c 0;
for (
$i 1$i $count$i++) {
  if (
$stat[$i]) {
     
$c++;
  };  
};

//Ausgabe
echo $c;

?>
Was haltet ihr davon ?

Grüsse,
V.
  Mit Zitat antworten
Alt 09.04.2005, 21:57  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Vermaard
PHP-Code:
<?php
echo "phpinfo()";

?>
Klasse *gg*
Ausgabe:
Code:
phpinfo()
:wink:
imported_Ben ist offline   Mit Zitat antworten
Alt 09.04.2005, 22:10  
Gast
 
Beiträge: n/a
Standard

@Ben
Betrachte es als einen syntaktischen Meta-Witz

Weis auch nicht wie das passiert ist
  Mit Zitat antworten
Antwort


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
[Erledigt] 'upload-Datei' Zeile für Zeile auslesen Felix PHP Tipps 2008 18 29.06.2008 02:55
Zeile aus Datei auslesen und teil davon verändern... BartTheDevil89 PHP Tipps 2008 5 04.04.2008 21:00
Bestimmte Zeile aus Tabelle auslesen anhand von einer Angabe DerTschmi Datenbanken 6 18.03.2006 17:00
Bilder auslesen und nach 5 Bildern eine neue Zeile FireFIghter PHP Tipps 2006 1 09.03.2006 19:01
[Erledigt] *.bak Datei Zeile für Zeile auslesen PHP Tipps 2006 5 09.03.2006 14:25
Alle Daten ab Zeile x auslesen Datenbanken 3 12.10.2005 23:42
[Erledigt] nächste Zeile einer Db auslesen? PHP Tipps 2005-2 7 01.08.2005 00:11
zeile alphabetisch auslesen?? imported_kremser PHP Tipps 2005-2 5 29.07.2005 14:19
Auslesen der ersten Zeile in ein TXT File tomtaz PHP Tipps 2005 10 28.05.2005 14:59
Zeile auslesen Tschuu Datenbanken 2 02.01.2005 14:54
Letzte zeile auslesen Datenbanken 4 18.11.2004 21:45
jede 2. Zeile aus MySQL Tabelle auslesen PHP Tipps 2004-2 4 09.11.2004 14:25
[Erledigt] .reg Datei auslesen und bestimmte Zeile ändern PHP-Fortgeschrittene 19 27.10.2004 10:39
Mysql-datenbank von hinten auslesen PHP Tipps 2004 4 13.10.2004 12:27

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php random zeile, zufällig eine zeile aus datei auslesen php, mysql zufällige zeile, mysql zufällige zeile auswählen, sql zeile zufällig auslesen, php zufällige zeile auslesen, php zufällige zeile, php random zeile auslesen, mysql zufällig auslesen, mysql zufallsergebnis, stata bestimmte zeile ansprechen, php aus der datenbank zufällig auslesen random(), zufällige zeile auslesen mysql, php zufall zeile datei, sql random zeile, mysql zufällige zeike, php zeile zufall, php zufall zeile auslesen, mysql zufallsergebins, mysql zeile zufällig auslesen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:23 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.