Gewichtete SQL-Abfragen
Gewichtete Abfragen werde häufig im Banner-Umfeld benötigt. Also überall da, wo Banner nach bestimmten Kriterien einblendet werden sollen. Wenn man davon ausgeht, das Banner unterschiedlichen Klick-Erfolg haben, dann liegt der Gedanke nahe, genau diese Ba
2002-08-22 18:19:14 2002-08-22 18:19:14 admin
Gewichtete Abfragen SQL-Abfragen
Dieses Tutorial soll zeigen, wie eine gewichtete Abfrage mit PHP und MySQL realisiert werden kann.
Problemstellung:
Gewichtete Abfragen werde häufig im Banner-Umfeld benötigt. Also überall da, wo Banner nach bestimmten Kriterien einblendet werden sollen. Wenn man davon ausgeht, das Banner unterschiedlichen Klick-Erfolg haben, dann liegt der Gedanke nahe, genau diese Banner häufiger als andere einzublenden. Wie kann man so was realisieren?
Vorbereitungen:
Um überhaupt mit der Datenbank arbeiten zu können, benötigen wir erst einmal eine geeignete Datenbankstruktur. Für unsere Problemstellung "Bannereinblendung" soll uns die folgende Struktur reichen.
#
# Tabellenstruktur für Tabelle `banner`
#CREATE TABLE banner (
id int(10) unsigned NOT NULL auto_increment,
bannertags varchar(254) NOT NULL default '',
gewicht tinyint(3) unsigned NOT NULL default '0',
views int(10) unsigned NOT NULL default '0',
Name varchar(40) NOT NULL default '',
PRIMARY KEY (id),
KEY gewicht (gewicht)
) TYPE=MyISAM;#
# Daten für Tabelle `banner`
#INSERT INTO banner VALUES (1,'<a href="http://www.php-resource.de/" target="_top">
<img src="http://www.php-resource.de/banner/thephpresource468.gif" border="0">
</a>','1','','Banner1');INSERT INTO banner VALUES (2,'<a href="http://www.php-resource.de/" target="_top">
<img src="http://www.php-resource.de/banner/46860_it.gif" border="0">
</a>','2','','Banner2');INSERT INTO banner VALUES (3,'<a href="http://www.php-resource.de/" target="_top">
<img src="http://www.php-resource.de/banner/46860_it_2.gif" border="0">
</a>','3','','Banner3');
Tip: Falls Ihr phpmyadmin verwendet, könnt die obigen Anweisungen 1 zu 1 kopieren und in phpmyadmin ausführen.
ID | bannertags | gewicht | views | Name |
1 | <a href="http://www.php-resource.de/" target="_top"><img src="http://www.php-resource.de/banner/thephpresource468.gif" alt="Scripts and Tutorials for Webdeveloper" width="468" height="60" border="0"></a> | 1 | 0 | Banner1 |
2 | <a href="http://www.php-resource.de/" target="_top"><img src="http://www.php-resource.de/banner/46860_it.gif" alt="Scripts and Tutorials for Webdeveloper" width="468" height="60" border="0"></a> | 2 | 0 | Banner2 |
3 | <a href="http://www.php-resource.de/" target="_top"><img src="http://www.php-resource.de/banner/46860_it_2.gif" alt="Scripts and Tutorials for Webdeveloper" width="468" height="60" border="0"></a> | 3 | 0 | Banner3 |
Hinweis : Die Banner mit einem hohen Gewicht werden später nicht so oft eingeblendet!
Was benötigen wir?
Zuerst erzeugen wir und mit folgendem PHP Script eine zufällige Gewichtung
<?php
srand((double)microtime()*1000000);
$rand = rand(1,3);
?>
Dieser kleine Script liefert uns einen Wert (Gewicht) zwischen 1 und 3. Mit dieser Wert wollen wir nun die dazugehörigen Werte aus der Datenbank lesen. Was aber bedeutet dieser Wert?
Wie funktioniert's
Wenn wir davon ausgehen, das uns das obige Script den Wert $rand=2 liefert, dann würde uns die Abfrage$sql = "SELECT id, bannertags FROM banner WHERE gewicht<= '$rand' ";
die Banner1 und Banner2 zur Ausgabe anbieten. Banner3 würde nicht von der SQL-Abfrage betroffen sein, da das Gewicht von Banner3 > $rand ist.
Wie bekommen wie nun genau einen Banner aus der Datenbank zurück?
Die PHP-MYSQL-Funktionmysql_data_seek($sqlbanner,$show_BannerId);
erlaubt es uns, genau nach einem Eintrag zu suchen bzw. diesen genau anzugeben. Jetzt sind wir in der Lage, aus einer Anzahl von möglichen Banner genau einen auszuwählen. Doch welchen? Dieses überlassen wir wieder dem Zufall.
<?php
srand ((double) microtime() * 1000000);
$show_BannerId = rand(0,$Anzahlbanner-1);
?>
Alles verstanden?
Das folgende Listing zeigt das ganze Script.FILE:bannerdisplay.php
<?php
//verbindung zur Datenbank herstellen
$dblink =mysql_connect ("localhost","root","");
$select_db=mysql_select_db ("yourDB",$dblink);
//Gewichtung bestimmen
srand((double)microtime()*1000000);
$rand = rand (1, 3);
//Mögliche Banner auslesen. Dieses sind in der Regel mehrere!!
$sql = "SELECT id, bannertags FROM banner WHERE gewicht <= '$rand' ";
$sqlbanner = mysql_query($sql,$dblink) or die ("Fehler in SQL : $sql");
$Anzahlbanner = mysql_num_rows ($sqlbanner);
//aus der so eben erzeigten Liste genau eine zufällige BannerID bestimmen
if($Anzahlbanner == 1) {
$show_BannerId = 0;
} else {
srand ((double) microtime() * 1000000);
$show_BannerId = rand(0,$Anzahlbanner-1);
}
//Bannertag aus der Datenbank ausgeben
mysql_data_seek($sqlbanner,$show_BannerId);
$ban = mysql_fetch_array($sqlbanner);
//Ausgabe im Browser!
echo $show_BannerId;
echo $ban[bannertags];
?>
Hinweis : Um das Script zu testen, müssen die Logins, Datenbanken der eigenen Umgebung angepasst werden!
$dblink =@mysql_connect ("local","root","");
$select_db=mysql_select_db ("php-resource",$dblink);
Bernhard Bauder
Erfahrungen
Hier Kannst Du einen Kommentar verfassen
Verwandte Beiträge
grafischen Counter
Oftmals wird gefragt wie man einen grafischen Counter mit PHP realisieren könnte. Hier ist die Antwort ...

Autor :
t63@
Kategorie:
PHP-Tutorials
Ein Gästebuch in PHP Programmieren
Eine ausführliche Anleitung wie man auf einfache Art ein Gästebuch realsiert. Dieses Gästebuch basiert auf einer Textdatenbank! ...

Autor :
Freak
Kategorie:
PHP-Tutorials
HTML5-Formulare mit jQuery.html5form
Mit dem von Matias Mancini machen Sie aus Ihrem Browser einen HTML5-Kompatiblen Bowser. Mit Einschränkungen aber ... ...

Autor :
admin
Kategorie:
Sonstige Tutorials
Datenbankinhalt für Suchmaschinen aufbereiten
Sie haben eine Datenbankanwendung geschrieben und keiner weiß, welche Daten bei Ihnen zu finden sind. Suchmaschinen gehen natürlich nicht so weit, daß sie Abfragen an die Datenbank senden. Somit bleibt der Inhalt Ihrer Tabelle für Suchmaschinen unsichtbar ...

Autor :
Wolfgang13
Kategorie:
SEO Tutorials
Reguläre Ausdrücke
In diesem Tutorial wird erklärt, wie reguläre Ausdrücke aufgebaut sind, was die Metacharaktere (Zeichen mit spezieller Bedeutung) eines Patterns bedeuten, und wie man das ganze in PHP umsetzt. Es werden nur die wichtigsten Teile erklärt, für weiterführend ...

Autor :
webmaster2@
Kategorie:
PHP-Tutorials
Responsive Webdesign
Einstieg in Responsive Webdesign und Grids ...

Autor :
admin
Kategorie:
Sonstige Tutorials