dri: Mysql id nicht gefundener Reihe zurück geben

Hallo,

gibt es eine Möglichkeit in Mysql 5.1 die ID einer nicht gefundenen Reihe heraus zu finden?

Select * FROM t WHERE (id='1' OR id='2' OR ....) AND deleted='1'

Wenn die Reihe mit der Id 1 deleted ist, wird sie durch den Select nicht ausgeben, ich möchte aber in dem Fall "benachrichtigt" werden dass die Reihe mit der Id 1 nicht ausgeben wurde. Wenn möglich ein Array mit allen nicht gefundenen Reihen-Id's.

Gibt es dazu eine Mysql Funktion, oder muss ich mit PHP in der while Schleife in der ich die Mysql Ausgabe verarbeite, die ausgegebenen Id's speichern, und am Ende mit den gesuchtenen Ids vergleichen?

dri

  1. Hallo,

    gibt es eine Möglichkeit in Mysql 5.1 die ID einer nicht gefundenen Reihe heraus zu finden?

    Select * FROM t WHERE (id='1' OR id='2' OR ....) AND deleted='1'

    Wenn die Reihe mit der Id 1 deleted ist, wird sie durch den Select nicht ausgeben,

    wenn der Datensatz mit der id 1 in der Spalte deleted den Wert 1 aufweist, wird dieser angezeigt. Wenn Du dagegen meinst, ein physisch gelöschter Datensatz, der einst die id 1 aufwies, ...

    ich möchte aber in dem Fall "benachrichtigt" werden dass die Reihe mit der Id 1 nicht ausgeben wurde. Wenn möglich ein Array mit allen nicht gefundenen Reihen-Id's.

    ... dann nein, dafür gibt es nichts. Wozu auch? Wie auch?

    Wenn Dich "gelöschte" Datensätze interessieren, dann darfst Du diese nicht mit der DELETE-Anweisung löschen, sondern solltest ein Flag setzen, das den Datensatz als gelöscht kennzeichnet.

    Freundliche Grüße

    Vinzenz

    1. Ich möchte die Id's existierender Einträge die aber auf nicht angezeigt werden weil in einer Spalte ein bestimmer boolean Wert auf 1 ist.

      Im Select sollte deleted eigentlich auf 0 sein, da ich NICHT gelöschte (nicht physisch) Reihen suche
      Select * FROM t WHERE (id='1' OR id='2' OR ....) AND deleted='0'

      Also nicht die Id's ALLER nicht angewiesenen Reihen, sondern nur die die auf Grund einer bestimmten Bedingung nicht angezeigt werden.

      Das beste ist Wohl ein PHP-Array, damit funktioniert meine Abfrage, nur wollt ich es eleganter machen.

      Vielen Dank für deine Antwort.
      dri

      1. Hallo,

        Also nicht die Id's ALLER nicht angewiesenen Reihen, sondern nur die die auf Grund einer bestimmten Bedingung nicht angezeigt werden.

        das geht doch ganz einfach mit der entsprechenden WHERE-Klausel. Das ist überhaupt kein Problem.

        Das beste ist Wohl ein PHP-Array,

        Nein, natürlich nicht. Sowas erscheint mir völlig überflüssig.

        Könntest Du einfach eine Beispieltabelle mit ein paar (Beispiel-)Datensätzen zeigen, sowie das gewünschte Ergebnis mit der Erklärung, warum dies so gewünscht ist.

        Freundliche Grüße

        Vinzenz

        1. Der Sinn des Ganzen ist es Cookies zu updaten.

          Ich speichere in einem Cookie Lesezeichen zu bestimmten Artikeln, und wenn ich mir an Hand des Cookies eine Liste aller mit Lesezeichen versehenen Artikel anzeigen lasse, möchte ich gleichzeitig im Cookie die Id's der Artikel löschen die nicht mehr öffentlich sichtbar sind(aber noch in der Datenbank) und deshalb in der Spalte 'deleted' den Wert '1' haben.

          Der Cookie sieht folgender Massen aus:
          Name Bookmark
          Content 1:4:9:17       ( halt eine : getrennte Liste der Id's)
          ...

          Beim Aufrufen der Lesezeichen Seite lese ich den Cookie und generiere mir die Selectsyntax:

            
          		$bookmarks = explode(":",$_COOKIE["Bookmark"]);  
          if (!empty($bookmarks)){  
          			$selectsyntax2 = $selectsyntax2." AND (";  
          			foreach($bookmarks as $index => $value) {  
          				if ($index != 0) {  
          					$selectsyntax2 = $selectsyntax2 . " OR";  
          				}  
          				$found_bms .= ":".$value;  
          				$selectsyntax2 = $selectsyntax2." ad_ID ='".$value."'";  
          			}  
          			$selectsyntax2 = $selectsyntax2 ." )";  
          		}
          

          $selectsyntax2 füge ich dann in die  restliche Select Syntax ein:
          $sql="SELECT * FROM advertisement WHERE ad_Approved='1' AND ad_Deleted='0' ".$selectsyntax2." ORDER BY ad_CreateDate DESC";

          In der Ausgabe:

          $query = mysql_query($sql) or die(mysql_error());  
          	if(mysql_num_rows($query) >= 1){  
          		$found_ads="0";  
          		while($row = mysql_fetch_array($query)) {  
          			$found_ads .=":".$row['ad_ID'];  
          echo"...";  
          		}  
          		update_bookmark($found_bms,$found_ads);  
          	}
          

          Mit $found_bms und $found_ads hab ich bis jetzt errechnet welche Lesezeichen nicht mehr sichtbar sind.

          Die Datenbanktabelle ist (vereinfacht):
          ad_ID | ad_Title | ad_Description | ad_Approved | ad_Deleted
          1     | Eintrag1 | Beschreibung1  | 1           | 0
          2     | Eintrag2 | Beschreibung2  | 1           | 0
          3     | Eintrag3 | Beschreibung3  | 1           | 1
          4     | Eintrag4 | Beschreibung3  | 0           | 0

          Der Cookie hätte folgenden Wert 2:1:3.

          Es würden also nur die Einträge 1 und 2 angezeigt, und ich möchte '3' als gesuchten aber nicht ausgegebenen Wert iergendwie zurück erhalten. Im Moment gibt mir das die Funktion update_bookmark zurück. Aber wie gesagt ich möchte wenn möglich eine MySql Funktion benutzten

          1. Hallo,

            Die Datenbanktabelle ist (vereinfacht):
            ad_ID | ad_Title | ad_Description | ad_Approved | ad_Deleted
            1     | Eintrag1 | Beschreibung1  | 1           | 0
            2     | Eintrag2 | Beschreibung2  | 1           | 0
            3     | Eintrag3 | Beschreibung3  | 1           | 1
            4     | Eintrag4 | Beschreibung3  | 0           | 0

            Es würden also nur die Einträge 1 und 2 angezeigt, und ich möchte '3' als gesuchten aber nicht ausgegebenen Wert iergendwie zurück erhalten.

            Wo ist das Problem?

            SELECT  
                ad_ID  
            FROM  
                tabelle  
            WHERE  
                ad_Deleted = 1  
            
            

            Möchtest Du nur solche, die das Flag ad_Approved haben und auf gelöscht gesetzt sind:

            SELECT  
                ad_ID  
            FROM  
                tabelle  
            WHERE  
                ad_Deleted = 1  
            AND  
                ad_Approved = 1  
            
            

            Ehrlich gesagt, kann ich kein Problem erkennen.

            Freundliche Grüße

            Vinzenz

            1. Ich möchte halt im selben Select sowohl die gewünschten und sichtbaren Post anzeigen lassen, UND die ID's der gewünschten und nicht sichtbaren Post herausfiltern

              dri

              1. Hallo,

                Ich möchte halt im selben Select sowohl die gewünschten und sichtbaren Post anzeigen lassen, UND die ID's der gewünschten und nicht sichtbaren Post herausfiltern

                ich kann das Problem immer noch nicht erkennen.

                » Die Datenbanktabelle ist (vereinfacht):
                » ad_ID | ad_Title | ad_Description | ad_Approved | ad_Deleted
                » 1     | Eintrag1 | Beschreibung1  | 1           | 0
                » 2     | Eintrag2 | Beschreibung2  | 1           | 0
                » 3     | Eintrag3 | Beschreibung3  | 1           | 1
                » 4     | Eintrag4 | Beschreibung3  | 0           | 0

                viel einfacher:L

                SELECT  
                    ad_ID  
                FROM  
                    tabelle  
                WHERE  
                    ad_Approved = 1  
                
                

                Jetzt bekommst Du sowohl die gewünschten als auch die nicht sichtbaren.
                Falls das auch nicht das gewünschte Ergebnis wäre, dann poste bitte exakt das gewünschte Ergebnis (als Abfrageergebnis, das heißt in Tabellenform).

                Freundliche Grüße

                Vinzenz

                1. Ach du *******

                  Ich glaub ich Stand auf der Leitung.

                  Ich kann in der Ausgabe von:

                  SELECT  
                      ad_ID  
                  FROM  
                      tabelle  
                  WHERE  
                      ad_Approved = 1
                  

                  testen ob ad_deleted 1 oder 0 ist und dann entsprechend etwas ausgeben oder das Lesezeichen löschen.

                  Vielen Dank
                  dri