Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
mysql [2015/11/03 13:33] – [Tauschen von Werten in einer Zelle] gerald | mysql [2024/02/29 13:36] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 160: | Zeile 160: | ||
UPDATE `qf_classlist` SET address1 = CONCAT (SUBSTRING_INDEX( `address1` , ' ', -1 ), ' ', SUBSTRING_INDEX( `address1` , ' ', 1 )) WHERE `jobnumber` = 2061 AND `address1` LIKE ' | UPDATE `qf_classlist` SET address1 = CONCAT (SUBSTRING_INDEX( `address1` , ' ', -1 ), ' ', SUBSTRING_INDEX( `address1` , ' ', 1 )) WHERE `jobnumber` = 2061 AND `address1` LIKE ' | ||
</ | </ | ||
+ | |||
+ | Tausche Vor/ | ||
+ | |||
+ | < | ||
+ | UPDATE `qf_classlist` SET name = CONCAT (SUBSTRING_INDEX( `name` , ', ', -1 ), ', ', SUBSTRING_INDEX( `name` , ', ', 1 )) WHERE `jobnumber` = 2710 | ||
+ | </ | ||
+ | |||
+ | |||
==== Feld auf einh. Länge bringen (durch führende Nullen) ==== | ==== Feld auf einh. Länge bringen (durch führende Nullen) ==== | ||
Zeile 171: | Zeile 179: | ||
+ | ==== Versehentlich doppelt importierte Namen kürzen ==== | ||
+ | |||
+ | Beispiel: Meier, Chris, Meier, Chris statt Meier, Chris | ||
+ | |||
+ | < | ||
+ | UPDATE `qf_classlist` SET name = SUBSTRING_INDEX(name, | ||
+ | </ | ||
+ | |||
+ | ==== Bei einem Auftrag den Bildstatus aller Bilder entfernen ==== | ||
+ | |||
+ | Beispiel: Bei Auftrag 2303 soll ein gewisser Status [status] entfernt werden. Aber nur bei Personenbildern. | ||
+ | < | ||
+ | UPDATE `qf_pictures` SET status = (status - [status]) WHERE `jobnumber` = 2303 AND (status | [status]) = status AND (content = 1 OR content = 2 OR content = 4 OR content = 2097152) | ||
+ | </ | ||
+ | |||
+ | ZB: Bit 3 ( = 4 = PICSTATUS_COLORPROOFED) entfernen: | ||
+ | < | ||
+ | UPDATE `qf_pictures` SET status = (status - 4) WHERE `jobnumber` = 2358 AND (status | 4) = status AND (content = 1 OR content = 2 OR content = 4 OR content = 2097152) | ||
+ | </ | ||
+ | |||
+ | ==== Klassenliste nachträglich löschen, bei der schon NB-Nummern erstellt wurden (aber keine Bilder) ==== | ||
+ | |||
+ | Beispiel: Bei Auftrag 2363 ist die Klassenliste falsch, sie soll gelöscht werden. Es wurden aber schon NB-Nummern reserviert. Die sollen auch weg, weil die Nummern sonst unnütz verschwendet werden | ||
+ | |||
+ | 1. NB-Nummern löschen: | ||
+ | < | ||
+ | DELETE ro.* FROM qf_reorder AS ro INNER JOIN qf_picture_relation AS r ON (ro.id=r.reorder_id) INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = 2363 | ||
+ | </ | ||
+ | |||
+ | 2. Dann die Relations: | ||
+ | < | ||
+ | DELETE r.* FROM qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = 2363 | ||
+ | </ | ||
+ | |||
+ | 3. Schliesslich die KL selbst: | ||
+ | < | ||
+ | DELETE c.* FROM `qf_classlist` as c WHERE c.jobnumber = 2363 | ||
+ | </ | ||
+ | |||
+ | ==== Alle Bilder löschen( wenn sie versehentlich importiert wurden) ==== | ||
+ | Besonderes Problem: Nachbestellnummern sind schon erstellt (ohne Bilder), ohne dass Bilder da sin. - weil den Schülern die Nummer schon mitgeteilt wurde. | ||
+ | |||
+ | Schauen, welche neuen (jetzt falschen) Relations erstellt wurden: | ||
+ | Die erkennt man daran, dass sie noch keine Reorder-Nummer haben: | ||
+ | < | ||
+ | SELECT * FROM qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = 123 AND picture_id> | ||
+ | </ | ||
+ | |||
+ | 1. Die neu erstellten Relations löschen (sind jetzt überflüssig): | ||
+ | < | ||
+ | DELETE r.* FROM qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = 123 AND r.picture_id> | ||
+ | </ | ||
+ | |||
+ | 2. Jetzt die Relations, die schon eine Picture-ID haben wieder auf 0 setzen: | ||
+ | < | ||
+ | UPDATE qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) SET r.picture_id=0 WHERE c.jobnumber = 123 AND r.picture_id> | ||
+ | </ | ||
+ | |||
+ | 3. Schliesslich die DB-Einträge der Bilder löschen: | ||
+ | < | ||
+ | DELETE FROM qf_pictures WHERE jobnumber = 123 | ||
+ | </ | ||
+ | |||
+ | und die Bilder im Archive löschen: | ||
+ | < | ||
+ | rm / | ||
+ | </ | ||
+ | |||
+ | ==== Alle Klassenlisten löschen ( wenn schon Barcodes/ | ||
+ | Besonderes Problem: Nachbestellnummern sind schon erstellt (ohne Bilder), ohne dass Bilder da sind. - den Schülern wurden die Nummern NICHT mitgeteilt. Jetzt sind die KLL aber falsch und müssen durch neue ersetzt werden. Die alten NB-Nummer werden __auch__ gelöscht. | ||
+ | |||
+ | |||
+ | Erst die NB-Nummern löschen: | ||
+ | < | ||
+ | DELETE ro.* FROM qf_reorder as ro INNER JOIN qf_picture_relation AS r ON (r.reorder_id=ro.id) INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = XXX | ||
+ | </ | ||
+ | |||
+ | Dann die dazugehörigen Relations löschen: | ||
+ | < | ||
+ | DELETE r.* FROM qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = XXX | ||
+ | </ | ||
+ | |||
+ | Dann die KLL selbst: | ||
+ | < | ||
+ | DELETE FROM `qf_classlist` WHERE `jobnumber` = XXX | ||
+ | </ | ||
+ | |||
+ | ==== Auf nicht existierende Klassenlisteneinträge zeigende NB-Nummern suchen/ | ||
+ | ==== | ||
+ | |||
+ | Wenn die Klassenliste gelöscht wurde, aber schon Nachbestellnummern erzeugt wurden, kann es sein, dass NAchbestelleinträge ins Nichts führen. | ||
+ | |||
+ | So kann man diese Einträge finden: | ||
+ | |||
+ | < | ||
+ | SELECT r.*, pr.classlist_id as CID FROM `qf_reorder` as r JOIN qf_picture_relation as pr ON r.id = pr.reorder_id LEFT JOIN qf_classlist as c ON pr.classlist_id = c.id WHERE pr.picture_id = 0 AND pr.classlist_id >0 AND c.id IS NULL ORDER BY pr.classlist_id | ||
+ | </ | ||
+ | |||
+ | Haben die alten und die neuen CIDs einen bestimmten Abstand X, kann man die Relations updaten (man sollte wissen, in welchen Bereich die gelöschten CIDs lagen): | ||
+ | |||
+ | (MariaDB) | ||
+ | < | ||
+ | |||
+ | SELECT * FROM qf_picture_relation as pr JOIN qf_reorder as r ON r.id = pr.reorder_id LEFT JOIN qf_classlist as c ON pr.classlist_id = c.id WHERE pr.picture_id = 0 AND pr.classlist_id >0 AND c.id IS NULL AND pr.classlist_id >= 450764 AND pr.classlist_id <= 450833 ORDER BY pr.classlist_id LIMIT 71 | ||
+ | |||
+ | UPDATE qf_picture_relation as pr JOIN qf_reorder as r ON r.id = pr.reorder_id LEFT JOIN qf_classlist as c ON pr.classlist_id = c.id SET classlist_id = (classlist_id + X) WHERE pr.picture_id = 0 AND pr.classlist_id >0 AND c.id IS NULL AND pr.classlist_id >= 450764 AND pr.classlist_id <= 450833 LIMIT 71 | ||
+ | </ | ||
+ | |||
+ | ==== 1 Feld: alles klein schreiben, nur 1. Buchstabe groß ==== | ||
+ | |||
+ | Alle Einträge eines Feldes sind groß (oder klein) geschrieben. Es soll aber nur der 1. Buchstabe jedes Namens (nach einem Leerzeichen) groß sein, der Rest klein. | ||
+ | |||
+ | Erst eine Funktion definieren: Quelle((https:// | ||
+ | < | ||
+ | DELIMITER || | ||
+ | DROP FUNCTION IF EXISTS ucwords|| | ||
+ | CREATE FUNCTION ucwords(s VARCHAR(255)) RETURNS VARCHAR(255) BEGIN | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | IF(SUBSTRING(s, | ||
+ | SET cadena = CONCAT(cadena,' | ||
+ | SET cont = cont + 1; | ||
+ | SET flag = 1; | ||
+ | ELSE | ||
+ | SET flag = 0; | ||
+ | END IF; | ||
+ | IF flag = 1 THEN | ||
+ | SET cadena = CONCAT(cadena, | ||
+ | ELSE | ||
+ | SET cadena = CONCAT(cadena, | ||
+ | END IF; | ||
+ | SET cont = cont + 1; | ||
+ | END WHILE; | ||
+ | |||
+ | | ||
+ | END; | ||
+ | || | ||
+ | DELIMITER ; | ||
+ | </ | ||
+ | |||
+ | Dann diese Funktion auf das Feld anwenden: | ||
+ | |||
+ | < | ||
+ | UPDATE `qf_classlist` SET name = ucwords(name) WHERE jobnumber = 2352 | ||
+ | </ | ||
+ | Achtung: aus 'VON DER BELLEN' | ||
+ | |||
+ | Dieser einfache Befehl macht nur den allerersten Buchstaben im Feld groß, den Rest klein: | ||
+ | |||
+ | < | ||
+ | SELECT id, CONCAT(UPPER(LEFT(name, | ||
+ | </ | ||
+ | |||
+ | ==== Klassenliste nach Bild-ID ordnen ==== | ||
+ | |||
+ | Anwendungsfall: | ||
+ | |||
+ | < | ||
+ | UPDATE qf_classlist, | ||
+ | </ | ||
+ | |||
+ | ==== Fortlaufende Nummern im Barcodes-Feld vergeben ==== | ||
+ | |||
+ | Das Barcode-Feld soll fortlaufende Nummern bekommen, beginnend mit 1000: | ||
+ | |||
+ | < | ||
+ | SELECT @i:=1000; UPDATE `qf_classlist` SET code = @i:=@i+1 WHERE `jobnumber` = 1234 AND (code IS NULL OR code = '' | ||
+ | </ | ||
+ | |||
+ | ==== Zeichensatz einer Column einer Tabelle in UTF-8 ändern ==== | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Doppelte Imports vom Schatzkiste/ | ||
+ | |||
+ | Kann eigentlich nicht sein, dass ein Tag doppelt importiert wurde (aber manchmal eben schon, weil es einen Fehler gab und es nochmal gemacht werden musste). Folge ist, dass die Statistik nicht mehr ganz stimmt. Kam bislang nur 3X vor. | ||
+ | |||
+ | Zeigt doppelte an: Quelle((https:// | ||
+ | |||
+ | < | ||
+ | SELECT liste.id, liste.jobnumber, | ||
+ | </ | ||