====== 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%'