Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [SQL] Zufallsdatensatz auslesen - MySQL 3.23
Antwort
 
Themen-Optionen
Alt 16.03.2005, 00:06   Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.583
Standard [SQL] Zufallsdatensatz auslesen - MySQL 3.23

Diese FAQ-Beitrag wurde geschrieben von: Ben




Zufallsdatensatz auslesen - MySQL 3.23


Manchmal möchte man eventuell so eine Art "random feature" einbauen. Oftmals z.B. bei Bildergalerien, wenn man ein Zufallsbild anzeigen lassen möchte.

In diesem Tutorial versuche ich mal das Prinzip zu verdeutlichen. Ich nehme dafür eine bestehende Datenbanktabelle mit Newseinträgen

Es geht hierbei um nur eine einzige SQL-Anweisung bzw. um eine von MySQL zur Verfügung gestellte Funktion.

Wir gehen so vor, dass wir zunächst einmal einfach die Spalten des Datensatzes selektieren, die wir weiterverarbeiten möchten.

Code:
SELECT 
    _titel
FROM
    archive_news
Würden wir diese Anweisung an die Datenbank schicken würden wir alle Datensätze erhalten.
Die Anzahl kann man mit "LIMIT" begrenzen.

Also wären wir dann schon bei einer SQl-Anweisung, die so aussehen würde:
Code:
SELECT 
    _titel
FROM
    archive_news
LIMIT
    0, 1
Das würde immer nur einen Datensatz selektieren. Allerdings wäre das immer der erste. Das ist aber ja nicht unser Ziel.

MySQL bietet uns nun aber auch noch die Funktion RAND() an mit der wir einen Zufallswert bestimmen können.

Unsere Abfrage könnte somit also so aussehen:
Code:
SELECT 
    _titel
FROM
    archive_news
ORDER BY
     RAND()
LIMIT
    0, 1
Um das mal zu testen habe ich einfach mal ein kleines Script drumherum geschrieben

PHP-Code:
<?php

    
// Einbinden der Konfigurationsdatei
    
include_once 'config.inc.php';
         
    
// Erstellen der Verbindung zur MySQL-Datenbank
    
if( !$connection mysql_connect$_config['host'], $_config['user'], $_config['password'] ) ) {
        die( 
'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' );
    }

    if( !
mysql_select_db$_config['database'], $connection ) ) {
        die ( 
'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />
                   MySQL-Error: <br />' 
mysql_error() );
    } 
     
    
    
// SQL-Anweisung die einen zufälligen Datensatz selektiert
    
$sql 'SELECT 
                    _titel
               FROM
                    archiv_news
               ORDER BY
                    RAND()
               LIMIT 
                    0, 1'
;
                     
    
$res mysql_query($sql) or die( 'Error[SELECT|User]: <br />
                                                    <pre>' 
$sql '</pre>
                                                    <br />
                                                    MySQL-Error: ' 
mysql_error() );       
    
    
$news mysql_fetch_object($res);
    
    
printf'<h1>Zufallsartikel</h1>
              Titel: %s'
,
              
$news->_titel );  

?>
Oben verlinkte Funktion stößt uns aber auf folgende Aussage
Zitat:
Sie können eine Spalte mit RAND()-Werten nicht in einer ORDER BY-Klausel verwenden, weil ORDER BY die Spalte mehrfach auswerten würde. In MySQL-Version 3.23 können Sie jedoch folgendes tun: SELECT * FROM tabelle ORDER BY RAND()
Quelle: http://dev.mysql.com/doc/mysql/en/ma...html#id3048460

Ich bitte dies zu beachten!

Hier nochmal ein SQL-Export, damit Ihr das hier gezeigte auch mal ganz schnell testen könnt.

Code:
# 
# Tabellenstruktur für Tabelle `archiv_news`
# 

CREATE TABLE IF NOT EXISTS `archiv_news` (
  `_id` int(5) NOT NULL auto_increment,
  `_titel` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`_id`)
) TYPE=MyISAM AUTO_INCREMENT=11 ;

# 
# Daten für Tabelle `archiv_news`
# 

INSERT INTO `archiv_news` (`_id`, `_titel`) VALUES (1, 'Unterschied zwischen HTML und XHTML'),
(2, 'RSS-Feeds leicht gemacht'),
(3, 'Mozilla Thunderbird vs. MS Outlook'),
(4, 'Testbericht: Notebook "Dell Inspiron 6000"'),
(5, 'Informationen zum Einstein-Jahr'),
(6, 'Wozu braucht man eigentlich XML?'),
(7, 'Internettelefonie auf dem Vormarsch'),
(8, 'Umfrage: Wer wird deutsche Fußballmeister 2005?'),
(9, 'Studium vs. Ausbildung'),
(10, 'Stefan Kuntz neuer Sportmanager des TuS Koblenz');

Viel Spaß beim Rumspielen


Ich hoffe, dass Euch die Antwort auf die Frage 'wie man einen Datensatz zufällig selektiert' weitergeholfen hat.
Solltet Ihr Fragen haben, so schreibt bitte einen Beitrag im PHP-Forum mit einem Verweis auf diesen Thread.


Grüße Ben.

Geändert von Jann Hendrik (05.06.2007 um 10:26 Uhr). Grund: link angepasst
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Auslesen zweier verschiedener Datensätze in einem Query (mySQL) Chr!s Datenbanken 8 14.11.2006 19:57
[Linux] LAMP Tutorial - Installation von Apache, MySQL und PHP unter Linux Corvin Tutorials 6 17.04.2006 22:13
MySQL 5.1 kommt in die Beta-Phase Ben Nachrichten 1 02.03.2006 14:31


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

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44