Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
mysql [2021/11/22 18:24] – [Alle Klassenlisten löschen ( wenn schon Barcodes/Nachbestellnummern erstellt wurden)] geraldmysql [2025/03/10 13:21] (aktuell) – [Groß- & Kleinschreibung bei Abfrage einer Tabelle in 'utf8_unicode_ci', die ausgelegt ist] gerald
Zeile 161: Zeile 161:
 </code> </code>
  
-Tausche Vor/Nachnamen in Klassenliste (Karl, Maier statt Maier, Karl)+Tausche Vor/Nachnamen in Klassenliste (Karl, Maier statt Maier, Karl). (Vorname & Nachname sind vertauscht)
  
 <code> <code>
Zeile 266: Zeile 266:
 </code> </code>
  
-==== Auf nicht existierende Klassenlisteneinträge zeigende NB-Nummern suchen/ändern +==== Auf nicht existierende Klassenlisteneinträge zeigende NB-Nummern suchen/ändern ====
- ====+
  
 Wenn die Klassenliste gelöscht wurde, aber schon Nachbestellnummern erzeugt wurden, kann es sein, dass NAchbestelleinträge ins Nichts führen. Wenn die Klassenliste gelöscht wurde, aber schon Nachbestellnummern erzeugt wurden, kann es sein, dass NAchbestelleinträge ins Nichts führen.
Zeile 277: Zeile 276:
 </code> </code>
  
-Und ändern (man sollte wissen, in welchen Bereich die gelöschten CIDs lagen):+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)
 <code> <code>
  
 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 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 
 +</code>
  
-UPDATE qf_picture_relation SET classlist_id = classlist_id 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 LIMIT 71 
-SELECT * FROM `qf_reorder` 
  
 +==== 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:
 +
 +<code>
 +SELECT r.*, r.classlist_id AS CID, p.date_delete, p.jobnumber FROM 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 WHERE r.classlist_id > 0 AND c.id IS NULL AND !(r.reorder_id > 0) AND p.date_delete > DATE(NOW()) ORDER BY r.classlist_id
 </code> </code>
 +
 +Reparieren (hier für #2905 und Limit 250):
 +
 +<code>
 +
 +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 = '2905' AND r.classlist_id > 0 AND c.id IS NULL AND !(r.reorder_id > 0) AND p.date_delete > DATE(NOW()) LIMIT 250
 +
 +</code>
 +
  
 ==== 1 Feld: alles klein schreiben, nur 1. Buchstabe groß ==== ==== 1 Feld: alles klein schreiben, nur 1. Buchstabe groß ====
Zeile 345: Zeile 362:
 </code> </code>
  
-==== 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:
  
 <code> <code>
-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 = ''LIMIT 500
 </code> </code>
  
-==== Zeichensatz einer Colum einer Tabelle in UTF-8 ändern ====+==== Zeichensatz einer Column einer Tabelle in UTF-8 ändern ====
  
 <code>ALTER TABLE tel_log MODIFY telbook_name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci</code> <code>ALTER TABLE tel_log MODIFY telbook_name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci</code>
 +
 +==== Doppelte Imports vom Schatzkiste/Fotoaktions-Server finden ====
 +
 +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://www.pixelfriese.de/doppelte-eintraege-in-mysql-tabelle-finden/))
 +
 +<code>
 +SELECT liste.id, liste.jobnumber, liste.class, liste.name, liste.order_number, liste.value_payed, liste.order_number FROM qf_classlist as liste INNER JOIN (SELECT jobnumber, class, name, order_number, value_payed FROM qf_classlist GROUP BY jobnumber, class, name, order_number HAVING COUNT(id) > 1) dup ON (liste.jobnumber = dup.jobnumber && liste.name = dup.name && liste.class = dup.class && liste.order_number = dup.order_number && liste.value_payed = dup.value_payed) WHERE liste.value_payed > 0 AND liste.order_number != '' ORDER by jobnumber, class, name
 +</code>
 +
 +
 +==== Fotokation: Ein Angebot (oder mehrere) an das Ende des Offerstrings anhängen ====
 +
 +<code>
 +UPDATE `fotoaction_pics` SET offer = CONCAT(offer, ',163') WHERE `valid_to` > '2025-11-20' AND offer NOT LIKE '%,163' LIMIT 25000
 +</code>
 +
 +
 +==== Alle Bestellnummern der Fotoaktion eines Auftrags (z.B. für Excel) ====
 +
 +
 +<code>
 +SELECT class, name, orderinfo_key FROM `qf_classlist` WHERE `jobnumber` = 2871 AND `class` != 'Absent' AND `orderinfo_key` != '' ORDER BY class
 +</code>
 +
 +==== Die Nachbestellnummern eines Auftrages wurden erstellt/reserviert, sollen aber wieder weg ====
 +
 +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:
 +
 +<code>
 +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;
 +</code>
 +
 +Sind sie weg?
 +
 +<code>
 +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
 +</code>
 +
 +Jetzt die Relations löschen: (muss sein! Weil die reorder_id jetzt auf eine nicht-existierende picture_id zeigt!!!)
 +
 +<code>
 +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
 +</code>
 +
 +
 +Sind sie weg?
 +<code>
 +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
 +</code>
 +
 +==== Groß- & Kleinschreibung bei Abfrage einer Tabelle in 'utf8_unicode_ci', die ausgelegt ist ====
 +
 +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:** Sie können das BINARY-Keyword verwenden, um die Spalte in eine binäre Form umzuwandeln, wodurch die Unterscheidung zwischen Groß- und Kleinschreibung erzwungen wird:
 +
 +<code>SELECT * FROM tabelle WHERE BINARY spalte = 'Wert';
 +</code>
 +
 +  - **Binäre Kollation in der Abfrage festlegen:** Eine andere Möglichkeit ist, die Kollation direkt in der Abfrage zu ändern:
 +
 +<code>SELECT * FROM tabelle WHERE spalte COLLATE utf8_bin = 'Wert';</code>
 +
 +  - **Spalte mit einer binären Kollation erstellen:** Wenn die Abfrage häufiger benötigt wird, könnten Sie überlegen, die Spalte dauerhaft mit einer binären Kollation zu speichern:
 +
 +
 +<code>ALTER TABLE tabelle MODIFY spalte VARCHAR(255) COLLATE utf8_bin;</code>
 +
 +==== PHP: Einfach dt. Datum in SQL-Format umwandeln ====
 +
 +
 +PHP:
 +<code>
 +$date_de = '24.03.2025';
 +$date_sql = DateTime::createFromFormat('d.m.Y', $date_de)->format('Y-m-d');
 +echo $date_sql; // Gibt "2025-03-24" aus
 +
 +</code>
 +
 
Nach oben
mysql.1637605456.txt.gz · Zuletzt geändert: 2024/02/29 13:35 (Externe Bearbeitung)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0
DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp   Dogecoin Donations Accepted Here    DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp  DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp