<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Kommentare zu: Mit MySQL zuf&#228;lligen Datensatz selektieren</title>
	<atom:link href="http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/</link>
	<description>Optimierung und Tipps zur Beschleunigung von PHP und MySQL</description>
	<lastBuildDate>Tue, 01 May 2012 16:51:11 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>Von: r</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-50622</link>
		<dc:creator>r</dc:creator>
		<pubDate>Wed, 25 Jan 2012 13:56:16 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-50622</guid>
		<description>nur ein SELECT

        $r = nysql_query($r);
        $n = mysql_num_rows($r);
        if($n &lt; 1) return false;

        $i = mt_rand(0,$n-1);
        mysql_data_seek($r,$i);
        return  mysql_fetch_row($r);

f&#252;r mehrer einfach ein are von $i anlegen und sortieren und dann mehrfach den lese pointer setzen.</description>
		<content:encoded><![CDATA[<p>nur ein SELECT</p>
<p>        $r = nysql_query($r);<br />
        $n = mysql_num_rows($r);<br />
        if($n &lt; 1) return false;</p>
<p>        $i = mt_rand(0,$n-1);<br />
        mysql_data_seek($r,$i);<br />
        return  mysql_fetch_row($r);</p>
<p>f&#252;r mehrer einfach ein are von $i anlegen und sortieren und dann mehrfach den lese pointer setzen.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Maik</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-30932</link>
		<dc:creator>Maik</dc:creator>
		<pubDate>Sun, 21 Mar 2010 18:30:21 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-30932</guid>
		<description>Ich danke dir f&#252;r diesen super Beitrag, mit deiner Hilfe konnte ich die ewig leidige Performance Bremse in meinem Script beseitigen. :)

Viele Gr&#252;&#223;e
Maik</description>
		<content:encoded><![CDATA[<p>Ich danke dir f&#252;r diesen super Beitrag, mit deiner Hilfe konnte ich die ewig leidige Performance Bremse in meinem Script beseitigen. <img src='http://phpperformance.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Viele Gr&#252;&#223;e<br />
Maik</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Patrick</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-30800</link>
		<dc:creator>Patrick</dc:creator>
		<pubDate>Thu, 11 Mar 2010 19:47:47 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-30800</guid>
		<description>Das war mal wieder ein toller Beitrag!

Interessant w&#228;re es auch einmal zu vergleichen, was schneller ist, wenn man wirklich alle 6000 Datens&#228;tze haben m&#246;chte. (Ich vermute, dass sich deine Methode nur lohnt wenn gew&#252;nschte Datensatzanzahl sehr viel kleiner ist, als deine 6000 Datens&#228;tze)

Gr&#252;&#223;e Patrick</description>
		<content:encoded><![CDATA[<p>Das war mal wieder ein toller Beitrag!</p>
<p>Interessant w&#228;re es auch einmal zu vergleichen, was schneller ist, wenn man wirklich alle 6000 Datens&#228;tze haben m&#246;chte. (Ich vermute, dass sich deine Methode nur lohnt wenn gew&#252;nschte Datensatzanzahl sehr viel kleiner ist, als deine 6000 Datens&#228;tze)</p>
<p>Gr&#252;&#223;e Patrick</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tobias</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-29788</link>
		<dc:creator>Tobias</dc:creator>
		<pubDate>Mon, 11 Jan 2010 15:42:15 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-29788</guid>
		<description>@Jan: Wieso soll ich denn die IDs vorher raussuchen?
Ich glaube hier ist ein kleines Missverst&#228;ndnis.
Wie geschrieben, passe ich nur 2 Bl&#246;cke der &quot;Nun m&#246;chte man aber manchmal mehrere Datens&#228;tze zuf&#228;llig selektieren&quot; Funktion an. Also die DB selects f&#252;r &quot;COUNT(*)&quot; und nachher das &quot;LIMIT $rand,1 &quot; lasse ich unver&#228;ndert.

Also:
$num = (SELECT COUNT(*) ...)

$rands = range(0, $num – 1);
shuffle($rands);

do
{
$rand = current($rands);
$queryparts[] = &quot;SELECT spalte 
FROM tabelle 
WHERE andereSpalte=&#039;123&#039; 
LIMIT &quot;.$rand.&quot;,1&quot;;
}
while(next($rands) !== false);

....

ich hoffe es ist jetzt besser zu sehen was ich meine / was ich gemacht habe.

Hab gerade keine Zeit den kompletten Src zu schreiben.</description>
		<content:encoded><![CDATA[<p>@Jan: Wieso soll ich denn die IDs vorher raussuchen?<br />
Ich glaube hier ist ein kleines Missverst&#228;ndnis.<br />
Wie geschrieben, passe ich nur 2 Bl&#246;cke der &#034;Nun m&#246;chte man aber manchmal mehrere Datens&#228;tze zuf&#228;llig selektieren&#034; Funktion an. Also die DB selects f&#252;r &#034;COUNT(*)&#034; und nachher das &#034;LIMIT $rand,1 &#034; lasse ich unver&#228;ndert.</p>
<p>Also:<br />
$num = (SELECT COUNT(*) &#8230;)</p>
<p>$rands = range(0, $num – 1);<br />
shuffle($rands);</p>
<p>do<br />
{<br />
$rand = current($rands);<br />
$queryparts[] = &#034;SELECT spalte<br />
FROM tabelle<br />
WHERE andereSpalte=&#039;123&#039;<br />
LIMIT &#034;.$rand.&#034;,1&#034;;<br />
}<br />
while(next($rands) !== false);</p>
<p>&#8230;.</p>
<p>ich hoffe es ist jetzt besser zu sehen was ich meine / was ich gemacht habe.</p>
<p>Hab gerade keine Zeit den kompletten Src zu schreiben.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Jan</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-29780</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Mon, 11 Jan 2010 09:32:54 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-29780</guid>
		<description>@Tobias: Damit erh&#228;lst Du zwar eine Liste von durcheinander gew&#252;rfelten Zahlen, aber Du wei&#223;t ja im Voraus nicht, welche IDs es in der Tabelle &#252;berhaupt gibt. Und zuerst alle auszulesen, ist bei gr&#246;&#223;eren Tabellen auch keine L&#246;sung.</description>
		<content:encoded><![CDATA[<p>@Tobias: Damit erh&#228;lst Du zwar eine Liste von durcheinander gew&#252;rfelten Zahlen, aber Du wei&#223;t ja im Voraus nicht, welche IDs es in der Tabelle &#252;berhaupt gibt. Und zuerst alle auszulesen, ist bei gr&#246;&#223;eren Tabellen auch keine L&#246;sung.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tobias</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-29779</link>
		<dc:creator>Tobias</dc:creator>
		<pubDate>Mon, 11 Jan 2010 09:13:36 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-29779</guid>
		<description>Ich habe gerade vielleicht noch eine intresante L&#246;sung gefunden um mehrende Eintr&#228;ge zuf&#228;llig zu erhalten.
Lohnt sich aber nur f&#252;r Leute die eine ganze Liste durcheinander haben wollen (in mein Fall 10-20 Eintr&#228;ge)

statt der while schleife:
$rands = range(0, $num - 1);
shuffle($rands);


und statt dem foreach:
do
{
  $rand = current($rands);
....
}
while(next($rands) !== false);</description>
		<content:encoded><![CDATA[<p>Ich habe gerade vielleicht noch eine intresante L&#246;sung gefunden um mehrende Eintr&#228;ge zuf&#228;llig zu erhalten.<br />
Lohnt sich aber nur f&#252;r Leute die eine ganze Liste durcheinander haben wollen (in mein Fall 10-20 Eintr&#228;ge)</p>
<p>statt der while schleife:<br />
$rands = range(0, $num &#8211; 1);<br />
shuffle($rands);</p>
<p>und statt dem foreach:<br />
do<br />
{<br />
  $rand = current($rands);<br />
&#8230;.<br />
}<br />
while(next($rands) !== false);</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: MySQL, SEO und Wordpress - mysql,seo,wordpress,templates - Webworking</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-28729</link>
		<dc:creator>MySQL, SEO und Wordpress - mysql,seo,wordpress,templates - Webworking</dc:creator>
		<pubDate>Fri, 04 Dec 2009 09:03:45 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-28729</guid>
		<description>[...] Mit MySQL zuf&#228;lligen Datensatz selektieren Ich glaube ich habs an der einen oder anderen Stelle bereits erw&#228;hnt: ORDER BY RAND() ist aus dem Reich des B&#246;sen! :) Um genau zu sein: es ist die Performance-Bremse schlechthin! Wie ihr das zuf&#228;llige Auslesen von Datens&#228;tzen trotzdem hin bekommt erkl&#228;rt euch Jan. [...]</description>
		<content:encoded><![CDATA[<p>[...] Mit MySQL zuf&#228;lligen Datensatz selektieren Ich glaube ich habs an der einen oder anderen Stelle bereits erw&#228;hnt: ORDER BY RAND() ist aus dem Reich des B&#246;sen! <img src='http://phpperformance.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Um genau zu sein: es ist die Performance-Bremse schlechthin! Wie ihr das zuf&#228;llige Auslesen von Datens&#228;tzen trotzdem hin bekommt erkl&#228;rt euch Jan. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Christian Hünniger</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-28724</link>
		<dc:creator>Christian Hünniger</dc:creator>
		<pubDate>Fri, 04 Dec 2009 07:16:39 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-28724</guid>
		<description>@jan

ok, h&#246;rt sich plausibel an, aber hat die ID, wenn vorhanden (war auch nur ein beispiel), immer einen Index?

Hatte das mit den NULL Werten &#252;bersehen :-)

Gru&#223; Christian und weiter so :-)</description>
		<content:encoded><![CDATA[<p>@jan</p>
<p>ok, h&#246;rt sich plausibel an, aber hat die ID, wenn vorhanden (war auch nur ein beispiel), immer einen Index?</p>
<p>Hatte das mit den NULL Werten &#252;bersehen <img src='http://phpperformance.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Gru&#223; Christian und weiter so <img src='http://phpperformance.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Jan</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-28610</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Tue, 01 Dec 2009 17:21:38 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-28610</guid>
		<description>@Christian:
Bei COUNT(*) kann MySQL die Tabellen-internen Statistiken bzw. einen Index benutzen, um die Anzahl zu bestimmen.

COUNT(id) ist meist langsamer, weil es an verschiedene Bedingungen gekn&#252;pft ist. Hier d&#252;rfen NULL-Werte nicht mitgez&#228;hlt werden, die Spalte sollte im Index enthalten sein usw.

Das ganze habe &lt;a href=&quot;http://phpperformance.de/count-gegen-countspalte/&quot; rel=&quot;nofollow&quot;&gt;in diesem Beitrag&lt;/a&gt; schon mal beschrieben.</description>
		<content:encoded><![CDATA[<p>@Christian:<br />
Bei COUNT(*) kann MySQL die Tabellen-internen Statistiken bzw. einen Index benutzen, um die Anzahl zu bestimmen.</p>
<p>COUNT(id) ist meist langsamer, weil es an verschiedene Bedingungen gekn&#252;pft ist. Hier d&#252;rfen NULL-Werte nicht mitgez&#228;hlt werden, die Spalte sollte im Index enthalten sein usw.</p>
<p>Das ganze habe <a href="http://phpperformance.de/count-gegen-countspalte/" rel="nofollow">in diesem Beitrag</a> schon mal beschrieben.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Christian Hünniger</title>
		<link>http://phpperformance.de/mit-mysql-zufaelligen-datensatz-selektieren/comment-page-1/#comment-28609</link>
		<dc:creator>Christian Hünniger</dc:creator>
		<pubDate>Tue, 01 Dec 2009 17:16:12 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=963#comment-28609</guid>
		<description>TOP!

Aber eins w&#228;re noch anzupassen:

SELECT COUNT(*) ...


-- id oder der name einer spalte
SELECT COUNT(id) ...</description>
		<content:encoded><![CDATA[<p>TOP!</p>
<p>Aber eins w&#228;re noch anzupassen:</p>
<p>SELECT COUNT(*) &#8230;</p>
<p>&#8211; id oder der name einer spalte<br />
SELECT COUNT(id) &#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

