SteffenR: Problem mit MySQL Abfrage

moin ersteinmal ..
Ich habe da ein Problem mit einer mysql Abfrage..
ier mal ein Bild der Tabelle: http://www.port11.de/tab.gif

Wie ihr seht hat der User mit der UserId alle Banner, die auch der User adm hat. Da es sich hierbei um ein Demoportal handelt, ist dies auch beabsichtigt..
Nun möchte ich aber, am Ende einer Session, alle Daten, die der User slebst in die DB geladen hat wieder entfernen .. Im Beispiel wäre es das Bild "ban_88x31_01_neu.gif" ..
Wie kann ich das mit einer SQL Query lösen ?
In >PHP hatte ich schon versucht, dies mithilfe der array_diff Funktoin zu lösen (also beide einlesen, mit UserId = adm und UserId_4 -- dies funktionierte aber komischerweise nicht richtig..)

Danke für eure Hilfe..

mfg
StefenRR

  1. Hello,

    Nun möchte ich aber, am Ende einer Session, alle Daten, die der User slebst in die DB geladen hat wieder entfernen .. Im Beispiel wäre es das Bild "ban_88x31_01_neu.gif" ..

    Dann musst Du aber auch die Tabellen-Meta-Daten wieder zurücksetzen.
    Guck Dir mal "show table status" an.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Dann musst Du aber auch die Tabellen-Meta-Daten wieder zurücksetzen.
      Guck Dir mal "show table status" an.

      Nun meine Frage - WIeso und wie mache ich das dann =
      Und wie könnte ich mein Prolem dann lösen ?

      mfg SteffenR

      1. Hello,

        Dann musst Du aber auch die Tabellen-Meta-Daten wieder zurücksetzen.
        Guck Dir mal "show table status" an.

        Nun meine Frage - WIeso und wie mache ich das dann =
        Und wie könnte ich mein Prolem dann lösen ?

        Du kannst, nachdem der Versuch abgeschlossen ist, alle Tabellen wieder rücksetzen mit Restore (vorhher natürlich Backup machen) oder du kopierst einfach das gesamte Datenbankverzeichnis, wenn Du Zugriff darauf hast.

        Allerdings wirst Du bei "echtem HTTP" kaum feststellen können, wann der user fertig ist. Die "Session" ist verbindungslos. Der Server kann also nur eine vorwärts-positiv-Profüng vornehmen, aber keine rückwärts-negativ-Prüfung.

        Er kann also durch Nichtzugriff nicht feststellen, dass eine Session nun beendet wird, er kann beim Zugriff nur feststellen, ob eine Session besteht. Als Krücke nimmt man da dann die Zeit hinzu.

        Wenn Du also einen Testzugeng legen willst, kopierst Du für jeden User (für jede neue Session) die Datenbank in eine eigene DB, und legst eben den DB-Zeiger auf diese DB.

        Nach einiger Zeit musst Du dann die verwaisten DBs immer mal aufräumen.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Über diese Möglichkeit hatte ich acuh schon nachgedacht, habe sie dann aber wieder verworfen, da der Verwaltungsaufwand zu hoch gewesen wäre. Deshalb bin ich auf dei "1 Tabellen Lösung" umgestiegen ..
          Es müsste doch in MySQL möglich sein all die banner auszuschlieesen die der User adm besitzt UND der User 4 (inmeinem Beispiel) in einer SELECT Anweisung auszuwählen ..

          Genau diese Abfrage suche ich ..

          mfg
          SteffnnR

          1. Hello,

            Über diese Möglichkeit hatte ich acuh schon nachgedacht, habe sie dann aber wieder verworfen, da der Verwaltungsaufwand zu hoch gewesen wäre. Deshalb bin ich auf dei "1 Tabellen Lösung" umgestiegen ..
            Es müsste doch in MySQL möglich sein all die banner auszuschlieesen die der User adm besitzt UND der User 4 (inmeinem Beispiel) in einer SELECT Anweisung auszuwählen ..

            Wer ist denn der User?
            Über welchen Client bzw. welches API meldest Du dich denn beim DBMS an?

            Arbeitest Du ausschließlich mit phpMyAdmin, oder mit mysql-Front oder mit PHP odr mit PERL?

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Oh das vergaß ich zu sagen, es handelt sich in diesem Fall um ein PHP Script weöches mit einer MySQL Datrenbank zusammenarbeitet..
              Dabei gibt es ein sogenanntes Demoportal, welches für jeden User die Defaultdaten bereitstellt - dieser kann dann diese Daten beliebig ändern - nach 2 Stunden werden diese Daten dann wieder zurückgesettr auf die Defaultdaten ..

              Dies dürrfte zur Erklärung reichen, denk ich mal ..

              1. Hello,

                Oh das vergaß ich zu sagen, es handelt sich in diesem Fall um ein PHP Script weöches mit einer MySQL Datrenbank zusammenarbeitet..
                Dabei gibt es ein sogenanntes Demoportal, welches für jeden User die Defaultdaten bereitstellt - dieser kann dann diese Daten beliebig ändern - nach 2 Stunden werden diese Daten dann wieder zurückgesettr auf die Defaultdaten ..

                Dies dürrfte zur Erklärung reichen, denk ich mal ..

                Dann kannst Du doch einfach schon beliebig viele Datenbanken vorbereiten und einfach bei jeder neuen Session eine andere nehmen.

                Oder Du machst mittels MySQL ein Backup der Tabellen
                mit backup table $tablename to '/bachup/directory'  sicherst Du den Zustand

                Mit restore table $tablename from '/backup/directory'  kannst Du die Tabelle wiederholen.

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
          2. yo,

            Es müsste doch in MySQL möglich sein all die banner auszuschlieesen die der User adm besitzt UND der User 4 (inmeinem Beispiel) in einer SELECT Anweisung auszuwählen ..

            SELECT DISTINCT bannertext FROM tabellenname WHERE userid = '4' AND userid <> 'adm'

            Ilja

            1. yo,

              SELECT DISTINCT bannertext FROM tabellenname WHERE userid = '4' AND userid <> 'adm'

              so ein quatsch, meine freundin hat mich abgelenkt. ;-)

              also, du musst ein self join bilden, damit solte es gehen....

              Ilja