Kalle_B: kniffliges UPDATE-Kommando MySQL

Hallöle,

in einer Messe-Tabelle habe ich Besucher, die von einem Aussteller zum Gespräch gewünscht werden:

Tabelle 'kontakte':
besucher aussteller aussteller_wunsch
-------- ---------- -----------------
      25        365              0  ==> 1 (wg. 32)
      26        365              0  ==> 1 (wg. 32)
      32        365              1
      13        365              0  bleibt 0
      14        365              0  bleibt 0

Genaugenommen will der Aussteller nicht die Person, sondern irgendjemand aus der Firma sprechen. Ich muss nun AUCH bei den Kollegen den Aussteller-Wunsch eintragen.

Kollegen finde ich über eine zweite Tabelle:

Tabelle 'adressen':
firma person_id
----- --------
 4711       25
 4711       26
 4711       32
 4712       13
 4712       14

UPDATE kontakte
SET    aussteller_wunsch=1
WHERE  ???

Wie kann ich die zweite Tabelle abfragen?

Lieben Gruß aus Birkenau, Kalle

  1. Hi,

    MySQL-Version? Subselect verwenden...:
    UPDATE
    SET
    WHERE besucher IN
      (SELECT person_id FROM adressen WHERE firma = (SELECT firma FROM adressen WHERE person_id = 32) )

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. MySQL-Version?

      Wie kann man das abfragen?

      Subselect verwenden...:

      UPDATE
      SET
      WHERE besucher IN
        (SELECT person_id FROM adressen WHERE firma = (SELECT firma FROM adressen WHERE person_id = 32) )

      klappt leider nicht:

      SELECT *
      FROM bfp_kontakte
      WHERE aussteller_id = 878 AND besucher_id
      IN (

      SELECT id
      FROM bfp_adressen
      WHERE kurzname = (
      SELECT kurzname
      FROM bfp_adressen
      WHERE id = 32 )
      )
      LIMIT 0 , 30

      MySQL meldet:

      #1064 - Fehler in der Syntax bei 'SELECT id
      FROM bfp_adressen
      WHERE kurzname = (
      SELECT kurzname
      ' in Zeile 5.

      1. Hi,

        MySQL-Version?
        Wie kann man das abfragen?

        Du kannst mal in der phpinfo() nachgucken, bei mir steht da sowas wie
        Client API version  4.1.14
        in der Sektion MySQL. Ich meine mich zwar düster zu erinnern, dass Client-API und MySQL nicht die selbe Version haben müssen, aber 4 oder 5 vorne wäre die relevante Unterscheidung.
        Wenn ich mir allerdings deinen Fehler so anschaue scheinst du das mit den Subselects nicht machen zu können, damit läuft das auf entweder zwei Abfragen raus oder auf einen ziemlich häßlichen JOIN.

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
        1. echo $begrüßung;

          MySQL-Version?
          Wie kann man das abfragen?
          Du kannst mal in der phpinfo() nachgucken, bei mir steht da sowas wie
          Client API version  4.1.14
          in der Sektion MySQL.

          Diese Angabe ist dafür unbrauchbar. Sie kann stimmen, wenn z.B. beim Kompilieren von PHP die MySQL-API-Dateien des MySQL-Servers verwendet wurden, der das Statement ausführen soll. Aber darauf sollte man sich nicht verlassen.

          Ich meine mich zwar düster zu erinnern, dass Client-API und MySQL nicht die selbe Version haben müssen,

          Richtig.

          aber 4 oder 5 vorne wäre die relevante Unterscheidung.

          Nein. Vom Prinzip her gibt es keine Beschränkung mit einer beliebigen Client-API eine beliebige Anzahl Server unterschiedlicher Versionsstände anzusprechen. (Praktisch gibt es diese Beschränkungen wegen Inkompatibilitäten zwischen bestimmten Client-API- und Server-Versionen.)

          mysql_get_server_info() nach erfolgreichem Verbindungsaufbau zum fraglichen Server oder ein SELECT VERSION() liefern die Versionsnummer des Servers.

          echo "$verabschiedung $name";

          1. echo $begrüßung;

            mysql_get_server_info() nach erfolgreichem Verbindungsaufbau zum fraglichen Server oder ein SELECT VERSION() liefern die Versionsnummer des Servers.

            printf("MySQL server version: %s\n", mysql_get_server_info());

            ==> Fatal error: Call to unsupported or undefined function mysql_get_server_info() in tm421.php on line 295

            $res_v = mysql_query( "SELECT VERSION()" );
              $row   = mysql_fetch_array( $res_v );
              echo $row[0];

            ==> 3.23.58

            Ist wohl uralt? Habe die Domain auch schon ewig, WER ZU FRÜH KOMMT, DEN BESTRAFT DAS LEBEN - oder so.

            echo "$gutenacht $undschlafschön";

            1. Morgen!

              ==> 3.23.58

              Ui, ja, dann bekommst du Spaß, bei den 3ern müsste man jetzt erstmal nachschauen, was die überhaupt alles für JOINs mitmachen und was nicht. Also, es gibt eine Lösung, vermutlich mit 2 Joins nacheinander (Fortgeschrittene JOINs, kennst du glaube ich schon).
              Schema wäre etwa:
              adressen a1 join adressen a2  über a1 person = 32 und a1 firma = a2 firma
              und anschließend join mit kontakte über person = besucher.

              MfG
              Rouven

              --
              -------------------
              ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(