Benutzer-Werkzeuge

Webseiten-Werkzeuge


Übersetzungen dieser Seite:

programming:mysql

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`<t1.date /*last date (where) and the one before it with same name*/
WHERE t1.`name`='search for name' and t1.`date`='2020-10-12'
ORDER BY t1.`date` desc,t2.`date` desc /*sort by both tables date-column*/
limit 1 /*get only first dataset*/

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%'
programming/mysql.txt · Zuletzt geändert: 2023/06/08 17:06 von 127.0.0.1