Hallo!
Ich habe eine Tabelle, in der ich Werbung speicher. Nun möchte ich auf meiner Suchseite 5 Werbelinks anzeigen. Dazu möchte ich, dass die Werbelinks, deren Keywords mit dem Suchbegriff übereinstimmen, an erster Stelle kommen.
Also hole ich mir zunächste alle IDs aus der Tabelle, wo die Keywords mit dem Suchbegriff übereinstimmen. Anschließend hole ich mir die Werbelinks aus der Datenbank, die die entsprechenden IDs enthalten. Für den Fall, dass es weniger Links sind als 5, hole ich mir im nächsten Schritt alle Werbelinks aus der Tabelle, die NICHT die entsprechenden IDs enthalten. Anschließend füge ich beide Abfragen mit UNION zusammen.
Problem ist nun, dass obwohl ich in den Subabfragen ein "ORDER BY RAND()" drin hab, die Sortierung (aus welchen Gründen auch immer) nicht bei UNION greift, und die Links in der Reihenfolge aus der Datenbank kommen in der sie dort auch gespeichert sind.
Hat jemand eine Idee wie sich das Problem lösen lässt? Oder funzt ORDER BY RAND() im Subquery mit Union generell nicht?
Danke schonmal...
PHP-Code:
$kw = "SELECT id FROM ads WHERE keyword LIKE '%$keyword%'";
$q1 = "SELECT * FROM ads WHERE id IN ('".$kw."') ORDER BY RAND()";
$q2 = "SELECT * FROM ads WHERE id IN ('".$kw."') ORDER BY RAND()";
$ads = mysql_query("(".$q1.") UNION (".$q2.") LIMIT ".$limit)
Also hole ich mir zunächste alle IDs aus der Tabelle, wo die Keywords mit dem Suchbegriff übereinstimmen. Anschließend hole ich mir die Werbelinks aus der Datenbank, die die entsprechenden IDs enthalten. Für den Fall, dass es weniger Links sind als 5, hole ich mir im nächsten Schritt alle Werbelinks aus der Tabelle, die NICHT die entsprechenden IDs enthalten. Anschließend füge ich beide Abfragen mit UNION zusammen.
Problem ist nun, dass obwohl ich in den Subabfragen ein "ORDER BY RAND()" drin hab, die Sortierung (aus welchen Gründen auch immer) nicht bei UNION greift, und die Links in der Reihenfolge aus der Datenbank kommen in der sie dort auch gespeichert sind.
Hat jemand eine Idee wie sich das Problem lösen lässt? Oder funzt ORDER BY RAND() im Subquery mit Union generell nicht?
Danke schonmal...
Kommentar