Markus: negieren von Bit-Feldern

Hallo Forum...

Ich weiß nicht genau wie ob eine Möglichkeit besteht ein Datenbankfeld (z.B. SET of '0','1' oder BOOL) mit einem UPDATE umzukeheren.

Also wenn 1 drinsteht auf 0 setzen und umgekehrt. Ich hab mich jetzt schon blöd gesucht, darum hoffe ich das hier jemand eine patente Lösung kennt!

Ich benutze MySQL 4.x
Gruß, Markus

  1. Sup!

    Warum kannst Du den Wert nicht auslesen, negieren, wieder reinschreiben? Muss das die DB machen?

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
    1. Sup!

      Warum kannst Du den Wert nicht auslesen, negieren, wieder reinschreiben? Muss das die DB machen?

      Ja, das würde ich bevorzugen. Oder nutzt Du mehr Querys als nötig? Denke auf Dauer geht das auf die Performance?!

      Gruesse,

      Bio

  2. Hallo Forum...

    Ich weiß nicht genau wie ob eine Möglichkeit besteht ein Datenbankfeld (z.B. SET of '0','1' oder BOOL) mit einem UPDATE umzukeheren.

    Also wenn 1 drinsteht auf 0 setzen und umgekehrt. Ich hab mich jetzt schon blöd gesucht, darum hoffe ich das hier jemand eine patente Lösung kennt!

    Ich benutze MySQL 4.x
    Gruß, Markus

    OK, zur Info: ich beschränke mich beim Umschalten auf die Werte -1 und 1 und schalte um indem ich mit -1 multipliziere.

    Vielen Dank für ihre Aufmerksamkeit!

  3. Hallo Forum...

    Ich weiß nicht genau wie ob eine Möglichkeit besteht ein Datenbankfeld (z.B. SET of '0','1' oder BOOL) mit einem UPDATE umzukeheren.

    Also wenn 1 drinsteht auf 0 setzen und umgekehrt. Ich hab mich jetzt schon blöd gesucht, darum hoffe ich das hier jemand eine patente Lösung kennt!

    Ich benutze MySQL 4.x
    Gruß, Markus

    Hab noch eine weitere Möglichkeit gefunden, die ggf. sogar noch besser ist als das multiplizieren mit -1

    set x = abs(x-1)

    Gruß, Markus

    1. Sup!

      Also ich habe ja keine Ahnung von der db, aber vielleicht gibt es ja eine Skriptsprache oder stored procedures oder so, die Dir dabei helfen können.

      Du musst natürlich ggf. aufpassen wegen konkurrierender Zugriffe, gegenseitigem Ausschluss, bla.

      Aber im Prinzip ist es nicht die Aufgabe einer db, irgendwelche "Business-Logik" zu erledigen.

      Gruesse,

      Bio

      --
      Never give up, never surrender!!!
      1. Sup!

        Also ich habe ja keine Ahnung von der db, aber vielleicht gibt es ja eine Skriptsprache oder stored procedures oder so, die Dir dabei helfen können.

        Klar geht das, aber wie ich schon sagte, muß ich nicht unbedingt Performance verbraten, wenn es nicht nötig ist.

        Du musst natürlich ggf. aufpassen wegen konkurrierender Zugriffe, gegenseitigem Ausschluss, bla.

        Aber im Prinzip ist es nicht die Aufgabe einer db, irgendwelche "Business-Logik" zu erledigen.

        Grundsätzlich denke ich, dass die Datenbank das machen soll, was sie kann. Also mit Datensätzen arbeiten. Dazu gehört für mich auf jeden Fall auch das im Eröffnungposting geschilderte Problem!
        Also - ich persönlich lasse die Datenbank soviele Operationen wie möglich übernehmen weil ich allein dadurch auf datentransfer zwischen script/DBMS und der Datenbank verzichten kann - all dieses kostet Zeit und geht zu Lasten der Performance.

        Oder?

        Gruesse,

        Bio

        1. Hi,

          warum schneller reiten wollen, wenn man noch gar nicht vernünftig auf dem Pferd sitzen kann?

          (Das betrifft das Thema "oh, gott, meine Performance")

          Wie du boolsche (oder von aus auch bit) Felder negieren kannst, solltest du ja jetzt auf mindestens 3 Arten gelernt haben. Also sind doch alle Probleme aus dem Weg geräumt, oder?

          Gut Nacht
          Frank

    2. Hallo Forum...

      Ich weiß nicht genau wie ob eine Möglichkeit besteht ein Datenbankfeld (z.B. SET of '0','1' oder BOOL) mit einem UPDATE umzukeheren.

      Also wenn 1 drinsteht auf 0 setzen und umgekehrt. Ich hab mich jetzt schon blöd gesucht, darum hoffe ich das hier jemand eine patente Lösung kennt!

      Ich benutze MySQL 4.x
      Gruß, Markus

      Hab noch eine weitere Möglichkeit gefunden, die ggf. sogar noch besser ist als das multiplizieren mit -1

      set x = abs(x-1)

      Geht sogar ohne abs() :

      set x = 1 - x

      Im Übrigen würde ich auch soviel wie möglich von der Datenbank erledigen lassen - die sollte auf größtmögliche Effizienz optimiert sein. Jede Kommunikation mit einem anderen Programm bremst beide: Erst muss das andere Programm auf die Daten von der Datenbank warten, dann muss die DB "darauf warten" (warten tut sie sowieso, solange sie nichts zu tun hat), dass die Daten zurückkommen und sie wieder wegspeichern. Wenn die DB die Rechnung durchführt, sind die Wege kürzer und es eine "Kommunikation zwischen DB und Programm" weniger - das ist IMMER schneller. Und eleganter, auch wenn man keine Geschwindigkeit braucht.

      Viele Grüße
      Urmel

      1. set x = 1 - x

        Ich finde, daß das mit IF elegenater geht.

  4. Sup!

    Also wenn mysql 4 subselects kann, dann kann man ja vielleicht schreiben:

    update boolean from bla (select abs(boolean - 1) from bla)

    Whatever.

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
  5. echo $begrüßung;

    Ich weiß nicht genau wie ob eine Möglichkeit besteht ein Datenbankfeld (z.B. SET of '0','1' oder BOOL) mit einem UPDATE umzukeheren.

    Die Negation ist eine Umkehrung.

    Also wenn 1 drinsteht auf 0 setzen und umgekehrt.

    NOT 0 ergibt 1 und NOT 1 ergibt 0.

    echo "$verabschiedung $name";