Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
mysql [2021/05/20 12:12] – [Klassenliste nach Bild-ID ordnen] gerald | mysql [2025/03/10 13:21] (aktuell) – [Groß- & Kleinschreibung bei Abfrage einer Tabelle in 'utf8_unicode_ci', die ausgelegt ist] gerald | ||
---|---|---|---|
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 257: | Zeile 265: | ||
DELETE FROM `qf_classlist` WHERE `jobnumber` = XXX | 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 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Problem: Klassenliste wurde gelöscht, aber es waren DOCH schon Bilder an diese Klassenlisten gekoppelt ==== | ||
+ | |||
+ | Das heißt, die Bilder werden als nicht zugewiesen in Kuskus angezeigt, sind aber schon auf (nicht mehr existierende) Klassenlisten zugweisen. | ||
+ | |||
+ | Diese erst mal suchen: | ||
+ | |||
+ | < | ||
+ | SELECT r.*, r.classlist_id AS CID, p.date_delete, | ||
+ | </ | ||
+ | |||
+ | Reparieren (hier für #2905 und Limit 250): | ||
+ | |||
+ | < | ||
+ | |||
+ | UPDATE qf_picture_relation AS r JOIN qf_pictures as p ON r.picture_id = p.id LEFT JOIN qf_classlist as c ON r.classlist_id = c.id SET r.classlist_id = 0 WHERE p.jobnumber = ' | ||
+ | |||
+ | </ | ||
+ | |||
==== 1 Feld: alles klein schreiben, nur 1. Buchstabe groß ==== | ==== 1 Feld: alles klein schreiben, nur 1. Buchstabe groß ==== | ||
Zeile 314: | Zeile 362: | ||
</ | </ | ||
- | ==== Klassenliste nach Bild-ID ordnen | + | ==== Fortlaufende Nummern im Barcodes-Feld vergeben |
Das Barcode-Feld soll fortlaufende Nummern bekommen, beginnend mit 1000: | Das Barcode-Feld soll fortlaufende Nummern bekommen, beginnend mit 1000: | ||
< | < | ||
- | SELECT @i:=1000; UPDATE `qf_classlist` SET code = @i:=@i+1 WHERE `jobnumber` = 1234 LIMIT 500 | + | SELECT @i:=1000; UPDATE `qf_classlist` SET code = @i:=@i+1 WHERE `jobnumber` = 1234 AND (code IS NULL OR code = '' |
</ | </ | ||
- | ==== Zeichensatz einer Colum einer Tabelle in UTF-8 ändern ==== | + | ==== Zeichensatz einer Column |
+ | |||
+ | < | ||
+ | |||
+ | ==== 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, | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Fotokation: Ein Angebot (oder mehrere) an das Ende des Offerstrings anhängen ==== | ||
+ | |||
+ | < | ||
+ | UPDATE `fotoaction_pics` SET offer = CONCAT(offer, | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Alle Bestellnummern der Fotoaktion eines Auftrags (z.B. für Excel) ==== | ||
+ | |||
+ | |||
+ | < | ||
+ | SELECT class, name, orderinfo_key FROM `qf_classlist` WHERE `jobnumber` = 2871 AND `class` != ' | ||
+ | </ | ||
+ | |||
+ | ==== Die Nachbestellnummern eines Auftrages wurden erstellt/ | ||
+ | |||
+ | Die Klassenlisten sind drinnen, die Bilder sind noch nicht gemacht. Die NB-Nummern wurden reserviert, die Barcodes sind gedruckt. Fotograf hat keine Lust mehr und ein anderer Fotograf macht den Auftrag. Die alten NB-Nummern müssen weg als Datenschutzgründen und man muss die Reserviertung neu nachen. | ||
+ | |||
+ | Erst mal alle Nachbestellnummern des Auftrags löschen: | ||
+ | |||
+ | < | ||
+ | DELETE r | ||
+ | FROM qf_reorder AS r | ||
+ | JOIN qf_picture_relation AS rel ON (rel.reorder_id = r.id) | ||
+ | JOIN qf_classlist AS c ON (rel.classlist_id = c.id) | ||
+ | WHERE c.jobnumber = 2911; | ||
+ | </ | ||
+ | |||
+ | Sind sie weg? | ||
+ | |||
+ | < | ||
+ | SELECt r.* FROM qf_reorder AS r JOIN qf_picture_relation AS rel ON (rel.reorder_id = r.id) JOIN qf_classlist AS c ON (rel.classlist_id = c.id) WHERE rel.picture_id = 0 AND c.jobnumber = 2911 | ||
+ | </ | ||
+ | |||
+ | Jetzt die Relations löschen: (muss sein! Weil die reorder_id jetzt auf eine nicht-existierende picture_id zeigt!!!) | ||
+ | |||
+ | < | ||
+ | DELETE rel | ||
+ | FROM qf_picture_relation AS rel JOIN qf_classlist AS c ON (rel.classlist_id = c.id) | ||
+ | WHERE rel.picture_id = 0 AND c.jobnumber = 2911 | ||
+ | </ | ||
+ | |||
+ | |||
+ | Sind sie weg? | ||
+ | < | ||
+ | SELECT rel.* | ||
+ | FROM qf_picture_relation AS rel JOIN qf_classlist AS c ON (rel.classlist_id = c.id) | ||
+ | WHERE rel.picture_id = 0 AND c.jobnumber = 2911 | ||
+ | </ | ||
+ | |||
+ | ==== Groß- & Kleinschreibung bei Abfrage einer Tabelle in ' | ||
+ | |||
+ | Das ci hinten bedeutet 'case insensitiv' | ||
+ | |||
+ | |||
+ | Ich habe eine Tabelle in einer Datenbank mit der Kollation utf8_unicode_ci. Jetzt möchte ich eine Abfrage machen, die auf Groß- und Kleinschreibung achtet. Wie mache ich das? | ||
+ | |||
+ | Lösungsmöglichkeiten: | ||
+ | |||
+ | - **BINARY-Keyword verwenden: | ||
+ | |||
+ | < | ||
+ | </ | ||
+ | |||
+ | - **Binäre Kollation in der Abfrage festlegen: | ||
+ | |||
+ | < | ||
+ | |||
+ | - **Spalte mit einer binären Kollation erstellen: | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | ==== PHP: Einfach dt. Datum in SQL-Format umwandeln ==== | ||
+ | |||
+ | |||
+ | PHP: | ||
+ | < | ||
+ | $date_de = ' | ||
+ | $date_sql = DateTime:: | ||
+ | echo $date_sql; // Gibt " | ||
+ | |||
+ | </ | ||
- | < |