Rand() soll dynamisch + werden SQL Datenbank

Hallo Liebe Gemeinde.

Ich habe folgendes Problem, und zwar:

ich habe eine Datenbank mit folgenden Spalten: nr, url, name, beschreibung
so, mit einem php-script gebe ich die bilder zufällig mit ihrem namen und ihrer beschreibung aus, das klappt auch schon wunderbar, nur muss ich, wenn ich ein neues bild in die datenbank lade, bei „rand(1,x)“,[x is die maximale anzahl von bildern in der datenbank], immer x um 1 erhöhen, weil ja ein bild hinzugekommen ist.
da mir das aber auf die nerven geht, immer und immer wieder das script zu bearbeiten und dann hochzuladen habe ich mir überlegt, das x dynamisch sein soll, heißt, wenn ein bild hinzukommt, das es dann automatisch um 1 erhöht wird.

Gibt es da eine funktion die das ermöglicht?
ich bin über jede hilfe dankbar.

Grüße
Patrick

ich habe eine Datenbank mit folgenden Spalten: nr, url, name,
beschreibung
so, mit einem php-script gebe ich die bilder zufällig mit
ihrem namen und ihrer beschreibung aus, das klappt auch schon
wunderbar, nur muss ich, wenn ich ein neues bild in die
datenbank lade, bei „rand(1,x)“,[x is die maximale anzahl von
bildern in der datenbank], immer x um 1 erhöhen, weil ja ein
bild hinzugekommen ist.
da mir das aber auf die nerven geht, immer und immer wieder
das script zu bearbeiten und dann hochzuladen habe ich mir
überlegt, das x dynamisch sein soll, heißt, wenn ein bild
hinzukommt, das es dann automatisch um 1 erhöht wird.

Gibt es da eine funktion die das ermöglicht?
ich bin über jede hilfe dankbar.

Hallo Patrick,

die (lückenlos fortlaufende) Nummer des Feldes nr erhältst du automatisch mit „auto_increment“, einzustellen bei „Extras“ (ich nehme mal an, du hast eine MySQL-DB und phpMyAdmin?). Die brauchst du dann nicht mehr mit eingeben, das geht dann beim INSERT automatisch.

Dein X, also die maximale Anzahl aller DB-Einträge dieser Tabelle erhältst du dann mit SELECT COUNT(*) FROM myTable.

Hoffe, dir geholfen zu haben.

Gruß, Robi

Hallo Robi

Erstmal Danke für deine schnelle Antwort.

Ich muss dazu sagen, das ich erst ziemlich neu in php bin und keine ahnung hab, wie ich das mit rand() verbinde.
Das zählen funktioniert schon, aber irgendwie setzt der das bei rand nicht um, denn es kommen keine zufallsbilder mehr (beim aktualisieren der seite kommt immer nur ein bild).
Immerhin kein Error, also ist es schonmal nicht falsch.

Ich hoffe, du kannst mir da weiterhelfen

Gruß
Patrick

Hallo,

ergänzend, falls zu mySQL verwendest: Du kannst das auch komplett mySQL überlassen, und dir die Daten gleich in zufälliger Reihenfolge geben lassen:

SELECT nr,url,name,beschreibung, RAND() zufall FROM Tabelle ORDER BY zufall LIMIT 5

Die 5 nach dem Limit ist die Anzahl der Datendsätze, willst du alle haben, lasse das LIMIT 5 weg.

Wenn du da dann die Daten per mysql_fetch_row/assoc abrufst, bekommst du eben 5 zufällige Datensätze aus der Tabelle.

Alex

Hallo Patrick,

man lernt nie aus, ich selbst bin auch nicht soo der Datenbank-Experte.

Der Vorschlag von Alex ist m.E. genau das, was du brauchst. Ich kannte die Möglichkeit, im Selekt mit rand() zu arbeiten auch noch nicht und kann das selbst gut gebrauchen.

Also: einfach den SELECT so übernehmen, wie ihn Alex schrieb und die LIMIT-Angabe anpassen (also 1, wenn du nur ein Bild ausgeben willst, 10 für zehn Bilder und das LIMIT ganz weglassen, wenn alle Bilder in zufälliger Reihenfolge angezeigt werden sollen.

Gruß, Robi

Hallo alx

Vielen Danke für deine Antwort, ich werde das sofort ausprobieren und melden wenn es funktioniert.

Gruß
Patrick

Hallo Robi

Ich bin nicht allein, das ist gut :smile:

ich werde den Vorschlag von alx ausprobieren und melden wenn es funktioniert.

Vielen Dank für deinen Vorschlag.

Gruß
Patrick

Vielleicht noch als kleine Ergänzung: Bei wirklich großen Datenbanken mit ein paar 10000 Zeilen sollte man das nicht so machen, weil das ist nicht sehr schnell. Da dann doch lieber PHP nehmen.

Ok, es hat geklappt und funktioniert super.

Vielen Dank für deine Antwort und die schnelle Hilfe.

Gruß
Patrick

Ok, der Tipp von alx hat geklappt.
Danke für deine Hilfe.

Gruß
Patrick