Kalle_B: MySQL: Knifflige Gruppenabfrage

Beitrag lesen

Hallöle, Ilja,

SELECT hier_die_gewünschten_spalten
FROM kontakte k
WHERE k.aussteller_id = $input_aussteller AND
(k.besucher_id= $input_aussteller OR k.id IN
   (
   SELECT k2.id
   FROM kontakte k2
   WHERE k2.gruppen_id = k.gruppen_id
   AND k2.austeller_id = $input_aussteller
   )
)

versuch das mal auf dein jetztiges datendesign anzuwenden. ich kann mich nur nicht mehr erinnern, ob du unterabfragen abfragen kannst, sprich mysql 4.1+ hast.

Nöö, habe MySQL 3.23.58. Freut mich irgenwie, dass du es auch mit zwei Abfragen (Subselect) gemacht hast.

Hier jetzt meine Lösung:

// 2006-06-07 AUCH BESUCHERGRUPPE LESEN
        $q = "
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BUCHEN

SCHRITT 1: HOLE ALLE GRUPPENMITGLIEDER ZU DIESEM AUSSTELLER

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
 grb2.gruppen_id         grp_id
,grb2.adress_id          bes_id
,kon1.id                 kon_id
,kon1.aussteller_id      aus_id

FROM       bfp_gruppen_besucher AS grb1
          ,bfp_gruppen_besucher AS grb2
LEFT JOIN bfp_kontakte          AS kon1
ON        kon1.besucher_id    = grb2.adress_id
AND       kon1.aussteller_id  = ".$aus_id."
WHERE     grb1.adress_id      = ".$bes_id."
AND       grb2.gruppen_id     = grb1.gruppen_id
AND       kon1.aussteller_id IS NOT NULL
";
        $res_bu1 = mysql_query( $q, $conn_id ); zeigSqlFehler( $act, $q, $conn_id );

// KANN LEER SEIN, WENN KEIN GRUPPENMITGLIED
        $where_string = '';

for ( $i=0; $i<mysql_num_rows( $res_bu1 ); $i++ )
        {
          $row_bu1 = mysql_fetch_array( $res_bu1 );
          if ( $i > 0 ) $where_string .= ' OR ';
          $where_string .= "id=".$row_bu1['kon_id'];
        }

if ( !mysql_num_rows( $res_bu1 ))
        {
          $where_string = "id=".$row_bu1['kon_id'];
        }

$q = "
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BUCHEN FUER EINEN BESUCHER UND SEINE GRUPPENMITGLIEDER

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UPDATE ".$db[0]['kontakte']."
SET
 storno_kz      = 0
,slot_nr        = ".$slot_nr."
,sperr_kz       = 0
,aussteller2_id = ".$frei_aus_row['id']."
WHERE             ".$where_string."
";
  echo "<pre>".$q."</pre>\n";

Kalle