Datensatz random auslesen?

4 Antworten

Wenn die Datentabelle klein ist und Sie 10 zufällige Einträge einmal benötigen, verwenden Sie "LIMIT 10" anstelle von "LIMIT 0, 1".

$number = 10;
$sql_string = "SELECT question FROM tbl_game_1 ORDER BY RAND() LIMIT $number";

Bei großen Tabellen ist diese Methode schlecht, da MySQL dazu gezwungen wird, jeder Zeile eine Zufallszahl zuzuweisen und diese dann zu sortieren. Dieser Artikel beschreibt alternative Varianten der Abfragen und vergleicht deren Leistung.

Wenn Sie alle Datensätze der Tabelle in zufälliger Reihenfolge anzeigen möchten, können Sie sie in einem Array anzeigen, mit der "shuffle" -Funktion mischen und dann nacheinander anzeigen, bis das Array fertiggestellt ist.

Hallo!
Danke für Ihre Antwort.
Können sie mir das zufällig schreiben?
Link zum Code: https://codeshare.io/GANVAp
Habe dort schon probiert mit arrays zu arbeiten

0
@DMCDD

Ich kann den Code nicht vollständig schreiben.

Ihr Code ist etwas komplizierter als nötig. Die Hauptfrage ist jedoch, welches Ergebnis Sie jetzt erzielen und wie sehr es Ihren Erwartungen entspricht.

Führen Sie Ihren Plan schrittweise durch und überprüfen Sie das Ergebnis am Ende jeder Stufe mit der Funktion "print_r". Zum Beispiel:

  1. Holen Sie sich eine Reihe von Fragen.
  2. Mischen Sie das Array.
  3. Alle Einträge anzeigen.
  4. Alle Einträge in Blöcken von 10 Stück anzeigen.
  5. Und so weiter.

Die Hauptsache ist, nicht alles auf einmal zu schreiben, sondern Schritt für Schritt zu programmieren und sicherzustellen, dass das Ergebnis der Stufe erreicht wird.

0

Ein Array in dem die Datensätze sind, und ein Array, in dem Zahlen von 0 bis AnzahlAnDatensätzen random verteilt sind.

Dann nimmst du aus dem Array mit Zahlen immer die letzte Zahl raus und löscht sie, und diese rausgenommene zahl ist die stelle beim datensatz-array.

am schluss ist das array mit den zahlen 0 groß, dann wurde alles 1-mal ausgelesen

Falls etwas unverständlich war sag bescheid, dann schreibe ich dir den Pseudo-Code.

Danke dir erstmal für deine Antwort!
Wärst du so lieb und könntest mir das schreiben?
Hier ist die Funktion: https://codeshare.io/5ogWBM

0
@DMCDD

Ich beherrschte leider nur Java und C, ich kann dir also höchstens den Pseudocode schreiben 😅

0
@MrAmazing2

Oh achso, ja dann wäre es sehr nett von dir, wenn du mir den Pseudocode schreiben könntest. :)

0
@DMCDD

Also, du hast ein Array in dem die Datensätze sind, nenn wirs mal Daten.

int Anzahl = Daten.length; //die Anzahl an Datensätzen.

new Zahlen[Anzahl]; //erstellt ein Array der Länge Anzahl

for(int i = 0; i < Anzahl, i++){
Zahlen[i] = i;
} //Befüllt das Array mit den Zahlen von 0 bis Anzahl.


while(Zahlen.length > 0) {
int rand = random(Anzahl); // eine zufällige zahl von 0 - anzahl

int Stelle = Zahlen[rand]; //gibt eine zufällige Zahl aus

datensatz_ausgeben(Daten[Stelle]); //gibt den datensatz dieser stelle aus

for(int i = rand; i < Anzahl-1; i++){
Zahlen[i] = Zahlen[i+1];
} //Shiftet das ganze Array 1 nach links, so dass die rausgenommene zahl "gelöscht" wird.
Anzahl = Anzahl - 1; //Da jetzt eine Zahl weniger drinnen ist
}

message("Alles durchgegangen");


1

Das macht genau das, was er jetzt auch hat. Nur komplizierter und so, dass es auch nicht funktioniert..

0
@MrAmazing2

Könnte man die Funktion wie ich sie beschrieben habe, nicht 1:1 in Java nachschreiben? &. dann auf der Website anzeigen?

0
@MrAmazing2

Könntest du mir da den Code schreiben? Liebe Grüße.

0
@DMCDD

Wie gesagt kann ich deinen Code nicht lesen/verstehen, also kann ich ihn auch schlecht in Java-Code umwandeln, sorry.

0

Random funktioniert halt so, auch beim Lotto kommt es manchmal vor, dass die Zahl 7 gezogen wird und die woche drauf, noch mal die 7, und nicht erst alle anderen Zahlen.

Das was du willlst, würde ich folgendermassen lösen:

Schreiben alle Datensätze in ein Array, mische dies (mit Random) und lese jeden Datensatz nacheinander (seriell) aus

Hey =)
Kannst du mir zeigen wie du das meinst? Liebe Grüße.
https://codeshare.io/GANVAp

0
@DMCDD

Das ist auf jeden Fall nicht in 10 Minuten geschrieben, und aus dem kopf, kann ich PHP nicht -- das war nur ein Lösungsvorschlag, keine Richtlinien zum umsetzten.

function questions(){

   global $con;

   $stmt = $con->prepare("SELECT question FROM tbl_game_1 ");

   $stmt->execute();

   $result = $stmt->fetch();

   return $result[0];

}

Also Order by und limit ganz weglassen, du läst also die Datnebank, dass, was sie ist -- ein Datenspeicher.

result müsst ein Array sein, diese "returnen" (return $result;)

Dieses Array hat eine bestimmte Grösse, z.B. 100 -- also generierst du ein zweites Array, das auch 100 Plätze hat.

Jetzt liest du mit Hilfe der Randomfunktion einen Datensatz aus dem Ursprungsarray aus (z,B Datensatz 37) und speicherst diesen in $Neues_Array[0], setzte $result[37] auf leer

Dann holst du über Random den nächsten Datensatz, z.B. 59, diesen setzt du in $Neues_Array[1], $result[59] wieder auf leer setzten

Dann holst du den nächsten -Random -> 37 Oh Shit, hatten wir schon, da aber $result[37] leer ist, nächste Zufallszahl generieren -> 2 usw.

Also alle Datensätze, die du aus $result geholt hat leer setzten (oder eine Kennung "schon verwendet", damit keiner zweimal in das neue Array rübergeholt wird -- Problem gibt es sicherlich, wenn du fast alle Datensätze geholt hast (und immer Zufallszahlen generiert werden, die nur schon verwendet" finden), solltest also eine Abbruchbedingung definieren und die letzten Datensätze einfach so übernehmen.

Hast du $Neues_array gefüllt, kannst du es einfach in einer Schleife 1...100 ausgeben

0

C# Mysql Tabelle Auslesen?

Wie kann ich mit einer Hergestelten Verbindung eine Tabelle auslesen also wo Zum beispiel ein "Serial-Code" Steht(also der name)

    #   Name    Typ     KollationAttribute  Null    Standard

        test    text    latin1_swedish_ci   Nein    kein(e)

Wie lese ich dies aus?,der Serial Code soll von einer Textbox ausgelesen werden!

Mein Code: using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;

namespace PSSC
{
    public partial class PSSC : Form
    {
        public PSSC()
        {
            InitializeComponent();
        }
        string erial;
        private void cmd_login_Click(object sender, EventArgs e)
        {
            
        }

        private void PSSC_Load(object sender, EventArgs e)
        {
            MySql.Data.MySqlClient.MySqlConnection conn;
            string myConnectionString;

            myConnectionString = "server=xxyz;uid=xyz;" +
                "pwd=xyz;database=xyz;";

            try
            {
                conn = new MySql.Data.MySqlClient.MySqlConnection();
                conn.ConnectionString = myConnectionString;
                conn.Open();

            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                this.Hide();
                MessageBox.Show("No Database Connection!");
                this.Close();

            }
        }
    }
    }
...zur Frage

Mehrsprachige Webseite(n) in PHP steuern?

Ich besitze Webseiten in verschiedenen Sprachen. Von Code her sind alle gleich (kopiert), sind halt nur übersetzt. Um die Pflege des Codes einfacher zu gestalten möchte ich nun nur noch einen Code (root) benutzen und einfach mit Sprachdateien arbeiten. Bisher habe ich es so gehandhabt, dass ich per htaccess redirect PHP Datein ausgeführt habe.

RewriteRule ^apfel/([^/]*) /page.php [L]

In den kopierten Webseiten in anderen Sprachen habe ich dann einfach die Zeile geändert.

RewriteRule ^apple/([^/]*) /page.php [L]

Um den Code der Webseite einfacher zu pflegen plane ich nun nur noch eine Webseite (ein root) mit Sprachdateien. Jetzt stellt es mir die Frage, wie gehe ich mit den Redirects um?

Ich möchte ungern in eine htaccess datei sämtliche redirects in verschiedenen Sprachen schreiben. Meine plan wäre es jetzt den ganzen traffic auf eine einzige PHP Datei zu schicken und dort überprüfe ich welche domain aufgerufen wurde, lade anhand der die Sprachdatei ($lang["url"]) und überprüfe dann welchen Inhalt bsw. Sprache angezeigt werden soll.

Wie zum Beispiel bei domain.de

if($url == $lang["url"][1]) { 
// domain.de/apfel/
} else if ($url == $lang["url"][2]) { 
// domain.de/birne/
}

Oder bei domain.com

if($url == $lang["url"][1]) { 
// domain.com/apple/
} else if ($url == $lang["url"][2]) { 
// domain.com/pear/
}

Wenn ich nun den ganzen Traffic auf eine PHP Datei schicke ist das dann von der Perfomance nicht so gut da dies eine recht lange Datei werden kann? Falls es noch andere Lösungen geben sollte, höre ich diese gerne. Hoffe man versteht, welches "Problem" ich habe.

...zur Frage

MariaDB,PHP: Kann nicht von anderem Rechner auf Datenbank zugreifen?

Hi, hab bei mir auf einem RBP ne MariaDB MYSQL Datenbank angelegt, (incl. phpmyadmin).

Habe in diesem Bereich noch kaum Erfahrung und ich habe das Problem dass ich von dem Webserver (steht im selben LAN) nicht auf die DB mit PHP verbinden kann.

Also wenn ich verbinden möchte von dem Webserver kommt Folgende Fehlermeldung:

SQLSTATE[HY000] [2002] Connection refused

Wenn ich das direkt auf dem DB-Server mit localhost versuche geht es.

Falls es noch hilfreich ist hier das Script mit dem ich verbinde:

<?php
$con=mysqli_connect("x.x.x.111","username","password","dbname");
if (mysqli_connect_errno())
{
echo "Failed to connect to MariaDB: " . mysqli_connect_error();
} else {
echo "JO ES GEHT";
}
 ?>

Und nochmal der Problem konkret: wenn ich das Script auf einem anderen Server im selben Neztwerk ausführe komme ich nicht drauf, mit localhost geht es.

...zur Frage

Was möchtest Du wissen?