====== MySQL ====== ===== Variablen ===== set @d="2018-06-14"; set @st=CONCAT(@d," 00:00:00"); set @et=CONCAT(@d," 06:00:00"); ===== Datumsüberschneidung ===== where (h.starttime< @et) and (h.endtime> @st) ===== Blob als String ===== manche Befehle (u.a. CONCAT/CONCAT_WS/GROUP_CONCAT) erzeugen u.U. einen Binärwert (Blob) statt einen String. CAST(CONCAT_WS(";",h.id,h.starttime,h.endtime,count(t.id)) AS CHAR) ===== Update mit Join ===== UPDATE TABLEA a JOIN TABLEB b ON a.join_colA = b.join_colB SET a.columnToUpdate = [something] ===== Delete mit Join ===== delete s from head h inner join text t on t.id=h.description inner join status s on s.head_id=h.id where xxx ===== mehrstufiges Join ===== um nur Datensätze ranzuhängen, wenn verteilte (über mehrere Tabellen) Bedingungen zutreffen left join ticket_head th inner join ticket t ON t.id=th.ticket_id inner join apptype ta ON ta.id=t.apptype_system_id ON th.head_id=h.id and ta.name='tickettype' ===== insert/update ===== höchsten Wert beim Update: INSERT INTO monthlystats (id, server, time, uptime, players, rank) VALUES (09126, 6, 0912, 302, 0, 1) ON DUPLICATE KEY UPDATE uptime = GREATEST(uptime, VALUES(uptime)), players = GREATEST(players, VALUES(players)), rank = GREATEST(rank, VALUES(rank)) ===== nachfolgender Datensatz mit join ===== SELECT * FROM `table` t1 LEFT JOIN `table` as t2 ON t2.name=t1.name and t2.`date` ===== Zeitzonen ===== SELECT @@global.time_zone, @@session.time_zone; beim wert system muss man via shell auf dem Server schauen $ date +"%Z %z" CEST +0200 die DB solte eigentlich auf UTC sein und für die session kann man dann die entsprechende Zeitzone setzen: SET time_zone = 'Europe/Berlin' sollte mysql hier einen Fehler bringen, müssen die Zeitzonen im System importiert werden: $ mysql_tzinfo_to_sql /usr/share/zoneinfo/|mysql -u root mysql -p ===== Insert select ===== INSERT INTO status (ressort_id,head_id) SELECT 54,h.id FROM head h LEFT JOIN text txt ON txt.id=h.description WHERE txt.text LIKE '%test%'