Bedingtes löschen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bedingtes löschen

    Hallo!

    Ich habe eine Tabelle namens blacklist (c_guid, m_id). Nun möchte ich in der Tabelle tmpdata (c_id, m_id) die von der Blacklist beschriebenen Datenpaare löschen. Die c_guid aus der Blacklist muss aber erst in eine c_id umgewandelt werden, dies geschieht mithilfe der Tabelle translade (c_guid, c_id). Ist es möglich, dies in einem Query zu bewerkstelligen?

    Vielen Dank!

  • #2
    Beschreibe mal deine Datenstruktur, dann versteht vielleicht jemand, was du willst.
    Gruss
    H2O

    Comment


    • #3
      Hi!

      Okay, dann versuch ichs nochmal genauer:

      TABLE blacklist:
      char(32) c_guid
      int m_id
      PRIMARY KEY(c_guid, m_id)

      TABLE tmpdata:
      int c_id
      int m_id
      PRIMARY KEY(c_id, m_id)

      TABLE translate:
      char(32) c_guid
      int c_id
      PRIMARY KEY(c_guid, c_id)

      Ich möchte nun alle blacklist-einträge aus der Tabelle tmpdata löschen. Dafür muss innerhalb desselben Query die c_guid aus der blacklist in die dazugehörige c_id umgewandelt werden.

      Ist es so verständlicher?

      ;-)

      Comment


      • #4
        Original geschrieben von vls2k
        Ist es so verständlicher?
        Eigentlich nicht. Interessant wären ja v.a. die Beziehungen zwischen den Tabellen. Deshalb kann ich nur raten. Suchst du vielleicht sowas?
        Code:
        DELETE FROM 
        	tmpdate t
        WHERE
        	t.c_id IN(
        		SELECT
        			tr.c_id
        		FROM
        			translate tr
        		INNER JOIN
        			blacklist b USING(c_guid) 
        	)
        Umgewandelt wird dabei (und auch bei allen anderen Möglichkeiten) gar nichts.
        Gruss
        H2O

        Comment


        • #5
          Hi!

          Die Daten in tmpdata sind feste Wertepaare, es soll jeweils nur genau das Paar, was in der Blacklist steht, aus tmpdata gelöscht werden.
          Bei deinem Query wird bisher nur die c_id geprüft, bei dem zu löschenden Eintrag aus tmpdata soll jedoch jedoch genau das Paar (c_id, m_id) durch blacklist beschrieben werden.

          Pseudocode dafür
          Code:
          DELETE FROM 
          	tmpdata t
          WHERE
          	Paar(t.c_id, t.m_id) IN(
          		SELECT
          			tr.c_id, b.m_id
          		FROM
          			translate tr
          		INNER JOIN
          			blacklist b USING(c_guid) 
          	)

          Comment


          • #6
            Das mach das doch auch so:
            PHP Code:
            DELETE FROM 
                tmpdata t
            WHERE
                
            (t.c_idt.m_idIN(
                    
            SELECT
                        tr
            .c_idb.m_id
                    FROM
                        translate tr
                    INNER JOIN
                        blacklist b USING
            (c_guid
                ) 
            Ich kann mir allerdings nicht vorstellen, dass diese Datenstruktur sinnvoll ist. Aber das ist ja hier nicht die Frage.
            Gruss
            H2O

            Comment


            • #7
              wenn ich das DELETE durch ein SELECT * ersetze, erhalte ich die richtigen ergebnisse, beim DELETE FROM erhalte ich jedoch einen syntax error... woran könnte das noch liegen?

              Comment


              • #8
                wenn ich das DELETE durch ein SELECT * ersetze, erhalte ich die richtigen ergebnisse, beim DELETE FROM erhalte ich jedoch einen syntax error...
                Wie wäre es denn wenn du die Fehlermeldung hier posten würdest?
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Comment


                • #9
                  Ups, die habe ich total vergessen anzuhängen:

                  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 'WHERE (t.c_id, t.m_id) IN( SELECT tr.c_id, b.m_id ' at line 1

                  Comment

                  Working...
                  X