Frage zu MySQL Abfrage

Arndtinho

Erfahrenes Mitglied
Hallo,

ich suche aus 2 DB-Tabellen werte zusammen.
PHP:
$sql = "SELECT photos.cat_id, photos.image_name, 
categories.cat_name, categories.cat_date, categories.cat_thumb_path
        FROM photos, categories
        WHERE categories.cat_id = photos.cat_id
        ORDER BY categories.cat_date DESC, RAND()";
Das funktioniert auch ohne Probleme und ich bekomme alle Kategorien plus das jeweilige Bild angezeigt.
Nun möchte ich aber nur 4 Kategorien pro Seite anzeigen und habe den SQL-String so erweitert:
PHP:
$sql = "SELECT photos.cat_id, photos.image_name, 
categories.cat_name, categories.cat_date, categories.cat_thumb_path
        FROM photos, categories
        WHERE categories.cat_id = photos.cat_id
        ORDER BY categories.cat_date DESC, RAND() LIMIT 0, 4";
( Die Werte für Limit werden für jede Seite neu erzeugt - habe hier nur mal die Werte für die 1. Seite eingesetzt ). Nun wird nur noch die "jüngste" Kategorie plus Bild angezeigt. Ich bekomme aber auch kein Fehler.
Was mache ich verkehrt?

Gruß,
Arndtinho
 
Hi

ich bin auch nicht so davon überzeugt, dass wenn Du über rand() sortierst, dass noch eine andere Sortierung möglich ist, zumindest nicht in der Form, wie Du es machst. .

Was macht er, wenn Du nur nach rand() sortierst?

ORDER BY RAND() LIMIT 0, 4";
 
Jetzt werden zwar mehrere Kategorien angezeigt, aber auch nicht 100%ig richtig. In der DB sind 10 Kategorien, bei einem Limit = 4 sollte doch folgendes Ergebnis erscheinen:

Seite 1: 4 Kategorien
Seite 2: 4 Kategorien
Seite 3: 2 Kategorien

Aber es werden nach jedem Refresh verschieden viele Kategorien ausgegeben. Hier schwankt die Zahl zwischen 2 und 4. Ausserdem soll ja die Sortierung so sein, das auf Seite 1 immer die 4 aktuellsten Kategorien angezeigt werden.

Das muss doch irgendwie lösbar sein. :confused:

Gruß,
Arndtinho
 
Hi

Du musst dann im Limit weiterzählen

Limit 0,4 (seite 1)
Limit 4,4 (seite 2)
Limit 8,2 (seite 3)

Das kann man natürlich über eine Blätterfunktion automatisieren (vorausgesetzt, ich habe Dich jetzt richtig verstanden)

Ob das dann mit rand() noch funktioniert, bin ich überfragt, müsste aber, solang Du keine anderen Felder im Order by mitführst.
.
Ansonsten einfach in php ein Zufallscript generieren.

Such mal nach shuffle()
 
Ich habe ein Blätterfunktion, die die LIMIT's richtig weiterzählt.
Aber Du wirst recht haben, ich werde nicht daran vorbeikommen, mein Script in PHP zu erweitern. Dann Frage ich mich aber, warum MySQL eine RAND() - Funktion einsetzt, wenn diese schon bei LIMIT in Kombination mit ORDER BY nicht mehr funktioniert.

Gruß,
Arndtinho
 
Hi

doch Limit in Kombination mit rand() funktioniert Er hat offensichtlich nur ein Problem, wenn Du noch ein anderes Feld sortiert. Ich weiss nicht warum, vielleicht hat auch sowas seine Grenzen. Evtl. sogar von der Logik her, wobei jetzt zu überlegen wäre, wenn 4 Datensätze ausgeben werden, warum diese noch nach dem Zufall aufrufen... Aber Du wirst mit Sicherheit Deine Gründe haben. ;)
 
Ich frage mit meinem String die Kategorien und ein dazugehöriges Bild ab. Die Bilderdaten sind ebenfalls in einer Tabelle enthalten. Da ich zu jeder Kategorie ein Bild ( zufällig ausgewählt ) anzeigen möchte, nutze ich RAND(). Und wie schon erwähnt, soll die "jüngste" Kategorie am Anfang stehen. Das sind meine Beweggründe. ;)

Gruß,
Arndtinho
 
Zurück