Zeilenumbruch in Kommentarfeld der Datenbank

Ich stand vor dem Problem in ein Kommentarfeld in der Datenbank einen weiteren Kommentar einzufügen. Für den Fall, das schon ein Kommentar in dem Feld steht, sollte ein Zeilenumbruch erfolgen und dann der neue Kommentar eingetragen werden. Andernfalls sollte einfach nur der neue Kommentar eingetragen werden.

Hier meine Lösung zu dem Problem:

UPDATE Tabelle
    SET Tabelle.Kommentarfeld = 
         IF(
             CHAR_LENGTH(Tabelle.Kommentarfeld) > 0,
             CONCAT_WS('\n', Tabelle.Kommentarfeld, 'mein neuer Kommentar'),
             'mein neuer Kommentar'
         )
WHERE Tabelle.weiteresFeld > 0

Hilfreich war mir dieser Link bei der Lösung meines Problems.

DELETE über einen SQL JOIN

Möchte man einen DELETE über mehrere Tabellen hinweg machen (mit Hilfe von Joins), kann es durchaus vorkommen, dass man beim Ausführen seines DELETE-Statements einen Fehler bekommt.

Nach längerer Suche bin ich auf folgenden Hinweis gestoßen.

Ich wollte folgendes SQL ausführen:

DELETE FROM 
  table1
JOIN 
  table2 ON [**onClause**] 
JOIN 
  table3 ON [**onClause**] 
WHERE 
  [**whereClause**]

Dieses Statement lieferte mir allerdings einen Syntaxerror zurück. Durch Einfügen von USING funktionierte meine Query dann so, wie sie sollte.

DELETE FROM 
  table1
USING 
  table1 
JOIN 
  table2 ON [**onClause**] 
JOIN 
  table3 ON [**onClause**] 
WHERE 
  [**whereClause**]

Alternativ funktioniert auch Folgendes:

DELETE table1 FROM 
  table1
JOIN 
  table2 ON [**onClause**] 
JOIN 
  table3 ON [**onClause**] 
WHERE 
  [**whereClause**]

Liegt wahrscheinlich daran, das die Query nicht wirklich weiß, aus welcher Tabelle sie die ermittelten Datensätze löschen soll.

Ich hoffe dem Einen oder Anderen so eine unnötige Sucherei erspart zu haben 🙂

Update 23.01.2013:
Einen Interessanten Beitrag zur Thematik findet ihr hier.

Zend_Db_Select mit IN in WHERE-Clause

Möchte man über Zend_Db_Select in einer WHERE-Clause das IN benutzen, so muss man die für das IN übergebenen Werte nicht selber per implode() auseinander klamüsern. Dies kann das Zend_Db_Select für euch übernehmen. Siehe dazu nachfolgendes Beispiel:

$data = array(1,3,4);
$select->where('status_id IN(?)', $data);

Gefunden via Stackoverflow

SQL: Werte kopieren und anpassen

Wenn man in SQL Werte in einer Datenbank kopieren möchte, aber einzelne Werte vor dem Einfügen anpassen möchte, so kann das über folgendes Query realisiert werden:

INSERT INTO tabelle (
 spalte1,
 spalte2,
 spalte3,
 spalte4
)
SELECT
 "neuer wert" as spalte1,
 tabelle.spalte2,
 tabelle.spalte3,
 tabelle.spalte4
FROM tabelle
WHERE tabelle.spalte1 = "alter wert";

Aus der Tabelle „tabelle“ werden die Spalten 2-4 ausgelesen und Spalte 1 mit dem neuen Wert ersetzt, wenn Spalte 1 den Wert „alter Wert“ annimmt.