Mysql Abfrage eine colum nur bestimmte löschen

Rocky

Mitglied
Hallo,
ich habe momentan eine Colum local_language_id in der ich pro id die werte 6 und 9 habe.
bei manchen gibt es jedoch nur die local_language_id 9 aber nicht die local_language_id 6.

nun möchte ich diejenigen ids löschen die local_language_id 6 und local_language_id 9 haben aber dort nur die local_language_id 9.

wenn es jedoch nur die local_language_id 9 bei einer id gibt soll diese behalten werden

Bsp:
id | local_language_id
1 | 6
1 | 9
2 | 9

bleiben soll

1 | 6
2 | 9


danke schonmal
 
Zuletzt bearbeitet:
Versuch's mal so:
PHP:
$connection = mysqli_connect($host, $username, $password, $database); // Deine Datenbankverbindung

$extends = mysqli_query($connection, "SELECT DISTINCT local_language_id AS existenz FROM tabellenname WHERE local_language_id = '9'"); // mysqli_query macht Abfrage, ob local_language_id (DISTINCT) mit dem Wert local_language_id = '9' auf der Tabelle 'tabellenname' existiert und es soll anschließend ein alias hierfür erstellt werden
$ausgabe = mysqli_fetch_assoc($extends); // Liefert ein assoziatives Array, das der geholten Zeile entspricht
$ausgabe["existenz"]; // Gibt es diesbezüglich aus

$sql = "DELETE FROM tabellenname WHERE local_language_id = '9' AND id = '1'"; // löscht alle Datensätze, wo local_language_id = 9 und id = 1 ist
mysqli_query($connection, $sql); // Führt Abfrage aus.

Ob das jetzt zu 100% klappt, weiß ich nicht. Ich habe es nur mal nach meinen Vorstellungen aufgeschrieben, wie es vielleicht klappen könnte. Denn getestet habe ich es nicht, aber vom theoretischen her, sollte diese Variante meines Glaubens funktionieren.

LG Harry
 
Warum nicht gleich alles in einem einfachen Query?

Mit dem folgenden SQL kann man ermitteln, welche ids betroffen sind.
SQL:
SELECT     id  
FROM        my_table
WHERE       local_language_id IN (6,9)
GROUP BY    id
HAVING      COUNT(*) = 2

Un das ganze in ein SQL gepackt sieht dann so aus.
Lösche alle welche eine 9 haben und deren ID in der Selectionierten ID-Liste enthalten sind
SQL:
DELETE FROM
    my_table
WHERE   
    local_language_id = 9
    AND id IN (
        SELECT      id  
        FROM        my_table
        WHERE       local_language_id IN (6,9)
        GROUP BY    id
        HAVING      COUNT(*) = 2
    )
 
Zuletzt bearbeitet von einem Moderator:
Un das ganze in ein SQL gepackt sieht dann so aus.
Lösche alle welche eine 9 haben und deren ID in der Selectionierten ID-Liste enthalten sind
SQL:
DELETE FROM
    my_table
WHERE   
    local_language_id = 9
    AND id IN (
        SELECT      id  
        FROM        my_table
        WHERE       local_language_id IN (6,9)
        GROUP BY    id
        HAVING      COUNT(*) = 2
    )

Klappt leider nicht ganz so...

Fehler: You can't specify target table 'my_table' for update in FROM clause

Woran liegt da der fehler
 
Zuletzt bearbeitet von einem Moderator:
Deine Tabelle heisst nicht my_table
Da ich jedoch noicht wusste, wie deine Tabelle heisst, habe ich sie in meinem BEISPIEL einfach mal my_table genannt.
 

Neue Beiträge

Zurück