tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
574
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    TimN TimN ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Ort
    Karlsruhe (BW)
    Beiträge
    144
    Hallo, ich habe folgendes Problem:
    (MySQL)

    ich habe 2 tabellen:
    buecher (id, nummer)
    bestellungen (id, buch)

    In "bestellungen.buch" steht die ID des buches, das bestellt werden soll.
    In der Tabelle buecher kann es vorkommen, dass es die selbe Nummer mehrfach gibt.

    Jetzt muss ich es irgendwie hinbekommen, dass die buch ID bei den bestellungen bei doppelten nummern duch eine von beiden ersetzt wird. Ist schwer zu erklären...
    Ich schreib einfach mal ein Beispiel:

    vorher:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    buecher:
    id | nummer
    -----------------
    1 | 123-456
    2 | 456-789
    3 | 123-456
     
    bestellungen:
    id | buch
    ------------
    1 |   1
    2 |   1
    3 |   3

    nachher:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    buecher: (bleibt unverändert)
    id | nummer
    -----------------
    1 | 123-456
    2 | 456-789
    3 | 123-456
     
    bestellungen:
    id | buch
    ------------
    1 |   1
    2 |   1
    3 |   1   <= HIER hat sich etwas geändert

    Ich hoffe, dass es durch das Beispiel einigermaßen verständlich wurde...
    Wie kann ich das jetzt so hinbekommen?

    Gruß,
    Tim
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    wie wird denn bestimmt, durch welche id ersetzt werden soll? Soll das (wie im Beispiel) immer die niedrigste sein?

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    TimN TimN ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Ort
    Karlsruhe (BW)
    Beiträge
    144
    Ja, also eigentlich ist es vollkommen egal, durch welche id es ersetzt wird.
     

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    versuch es mal hiermit:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    UPDATE `bestellungen` `outer`
    SET `buch` = (
      SELECT MIN(`b2`.`id`)
      FROM `buecher` `b1`
      LEFT JOIN `buecher` `b2` USING (`nummer`)
      WHERE `b1`.`id` = `outer`.`buch`
    )

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  5. #5
    TimN TimN ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Ort
    Karlsruhe (BW)
    Beiträge
    144
    Danke für die Antwort, aber was ist b1 und b2?
    Weil einfach so funktioniert es nicht:
    Code :
    1
    2
    3
    
    [FONT=Courier New]#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MIN(`b2`.`id`)
      FROM `test_buecher` `b1`
      LEFT JOIN [/FONT]

    muss ich da noch irgendwas ersetzten?
     

  6. #6
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    b1 und b2 sind Aliase für beiden Referenzen auf die Tabelle buecher im Subquery. Anscheinend unterstützt deine MySQL-Version (< 4.1) keine Subquerys. Das macht das ganze leider etwas komplizierter… mal sehen, ob man das auch ohne hinbringt.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  7. #7
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    so könnte es klappen:
    Code :
    1
    2
    3
    4
    5
    6
    
    UPDATE `bestellungen`
    INNER JOIN `buecher` `b1` ON (`b1`.`id` = `bestellungen`.`buch`)
    INNER JOIN `buecher` `b2` ON (`b2`.`nummer` = `b1`.`nummer`)
    LEFT JOIN `buecher` `b3` ON (`b3`.`id` < `b2`.`id` AND `b3`.`nummer` = `b2`.`nummer`)
    SET `bestellungen`.`buch` = `b2`.`id`
    WHERE `b3`.`id` IS NULL

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  8. #8
    TimN TimN ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Ort
    Karlsruhe (BW)
    Beiträge
    144
    Vielen vielen Dank!
    Es funktioniert einwandfrei!

    Danke
     

Ähnliche Themen

  1. Mehrfache Sortierung MySQL
    Von dwex im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 19.06.09, 18:30
  2. Antworten: 2
    Letzter Beitrag: 24.02.09, 17:01
  3. [MSSQL] Mehrfache einträge zusammenfassen
    Von mnevis im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 17.02.08, 21:05
  4. Antworten: 3
    Letzter Beitrag: 22.12.07, 00:47
  5. Mehrfache Umbrüche entfernen
    Von Philipp_Frank im Forum PHP
    Antworten: 14
    Letzter Beitrag: 10.01.06, 18:18