Kalle_B: zufällige Reihenfolge generieren

Hallöle,

meine Frage von letzter Woche ist schon im Archiv verschwunden, ich komme aber erst heute dazu, es auszuprobieren - und es klappt nicht.
Archiv: http://forum.de.selfhtml.org/archiv/2007/2/t146221/

Aufgabe:
Für eine Messe soll von 9:00-9:45 Uhr für jeden Aussteller versucht werden, einen Termin mit einem Interessenten zu machen.

Schritt 1:
Es sind freie Aussteller (noch ohne Termin) zu finden.

Problem:
Die Aussteller, deren Namen mit A beginnt, haben mehr Chancen als die mit Z, für die bleibt kein Kunde mehr übrig.

Bisherige, ungenügende Lösung:
  $q = "
#~~~~~~~~~~~~~~~~~~

FREIE AUSSTELLER

#~~~~~~~~~~~~~~~~~~
SELECT
 '".$slot_nr."'   slot
,adr2.kurzname    aus_firma
,adr2.adr_art     adr_art
,adr1.adr_unt     adr_unt
,adr2.id          aus_chef
,adr1.id          aus_id
,anw1.slot_nr     anw_slot
,kon1.slot_nr     kon_slot
FROM     ".$db[0]['personen']." AS adr1

FIRMEN-KURZBEZEICHNUNG UND CHEF-ID

LEFT JOIN ".$db[0]['personen']." AS adr2
ON        adr2.owner_id=adr1.owner_id AND adr2.kurzname=adr1.kurzname AND adr2.adr_unt=1

#ANWESENHEIT IM SLOT
LEFT JOIN ".$db[0]['anwesenheit']." AS anw1
ON        anw1.owner_id=adr1.owner_id AND anw1.slot_nr=".$slot_nr." AND anw1.adr_id=adr1.id

#TERMIN IM SLOT
LEFT JOIN ".$db[0]['kontakte']." AS kon1
ON        kon1.owner_id=adr1.owner_id AND kon1.slot_nr=anw1.slot_nr AND kon1.aussteller2_id=adr1.id

ALLE AUSSTELLER-MITARBEITER

WHERE     adr1.owner_id=".$owner_id." AND adr1.adr_kz=1 AND adr1.adr_unt=".$adr_unt." ".$such."

GROUP BY  aus_firma, adr_unt, aus_chef, aus_id, anw_slot, kon_slot
HAVING    anw_slot IS NOT NULL AND kon_slot IS NULL

Zusätzliche Zeile ergibt SQL- Fehler:
ORDER BY  adr_art RAND(aus_firma)

Die Sortierung soll zuerst nach der Adreßart und innerhalb der gleichen Adreßart -zufällig_ nach Firmenname geschehen.

Wie geht das?

Lieben Gruß, Kalle

  1. Hi,

    Die Sortierung soll zuerst nach [Kriterium 1] und innerhalb der gleichen [Kriterienwerte] nach [Kriterium 2] geschehen.
    Wie geht das?

    dieses Problem ist zunächst einmal vollkommen unabhängig davon, dass eines der Kriterien den Zufall beinhaltet. Recherchiere in der Dokumentation Deines DBMS' nach der korrekten Syntax.

    A propos: "Adresse" schreibt man nicht mit "ß"; es sei denn, Du möchtest das vorhergehende "e" lang aussprechen ("Adrehße").

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. habe mich so auf RAND() konzentriert und übersehen, dass das Komma gefehlt hat:
    ORDER BY  adr_art, RAND(aus_firma)

    Nun kommt die Meldung:
    1054: Unknown column 'aus_firma' in 'order clause'

    Unverständlich, denn hier kannte SQL sie noch:
    GROUP BY  aus_firma, adr_unt, aus_chef, aus_id, anw_slot, kon_slot

    1. Unverständlich, denn hier kannte SQL sie noch:
      GROUP BY  aus_firma, adr_unt, aus_chef, aus_id, anw_slot, kon_slot

      1.) interessante Schreibweise, dieses SELECT mit den Kommas zu Beginn jeder neuen Zeile
      2.) Mal das SQL-Statement hier posten, das wirklich abgesandt wird, slo Problemisolierung betreiben
      3.) Eventuell mal ohne Aliasnamen testen

      1. 1.) interessante Schreibweise, dieses SELECT mit den Kommas zu Beginn jeder neuen Zeile

        Da kann ich unkompliziert Zeilen zufügen. Sonst muss ich immer drauf achten, dass die letzte anders, nämlich ohne Komma ist.

        So klappt's:
        ORDER BY  adr_art, RAND()

        Geht aus den Unterlagen nicht hervor, da ist der RAND() allein hinter ORDER BY.

        Ich hasse try and error, aber was soll's.

        Kalle