[BraLUG] SQL-Problem

Michael Höding hoeding at fh-brandenburg.de
Fr Apr 27 13:28:35 CEST 2007


Hallo Rob,


Robert Schulze schrieb:
> Hi,
>
> ich habe ein Problem mit einer SQL-Abfrage.
>
> Ich will aus drei Tabellen beliebige 4 Datensätze extrahieren, die in einer
> besonderen Spalte unterschiedlich sind. Es geht dabei um die Tabellen
> mrp_Destination, mrp_Housing und mrp_Housing_Price.
>
> mrp_Destination fasst u.a. ein Feld 'Lage'.
> mrp_Housing beinhaltet Unterkünfte, jede solche bezieht sich auf 1 Datensatz
> in mrp_Destination.
> mrp_Housing_Prices beinhaltet für jeden Datensatz in mrp_Housing einige
> Preise.
>
> Ich will nun genau 4 Datensätze rausholen, nämlich zu jeder Lage (1..4)
> genau eine Unterkunft, die aber zufällig sein soll. Mit folgendem Query
> bekomme ich aber immer genau die selben Objekte, was kann ich dagegen tun?
>
>   
by mysql geht so etwas:

ORDER BY rand() LIMIT 1

etwas in der Richtung könnte evtl. weiterhelfen
> Vielen Dank schonmal,
> Rob
>
>
> SELECT
>         mrp_Housing.ID AS ID,
>         mrp_Housing.Ausstattung_Bild_1 AS Ausstattung_Bild_1,
>         mrp_Housing.Typ AS Typ,
>         mrp_Destination.Lage AS Lage,
>         mrp_Destination.Name AS Destination,
>         mrp_Housing_Price.Price AS Preis
> FROM
>         mrp_Housing,
>         mrp_Destination,
>         mrp_Housing_Price
>
> WHERE
>         (mrp_Housing.Destination=mrp_Destination.ID) AND
>         (mrp_Housing.ID=mrp_Housing_Price.Housing)
>
> GROUP BY mrp_Destination.Lage;
>
>
>   
Das finde ich etwas verwirrend. Eigentlich sollte die Anfrage nicht 
funktionieren, da die Attribute hinter Select alle (ausser .Lage) nicht 
Teil des Group By-Ausdrucks sind und auch keine Aggregatfunktionen sind. 
Das DBMS kann also nicht entscheiden welcher Attributwert aus der Gruppe 
ausgegeben wird. Evtl. ist Dein DBMS da aber tolerant und gibt einfach 
den Wert zurück der intern gerade der erste ist.


Viele Grüße
Michael



Mehr Informationen über die Mailingliste Bralug