UPDATE mit Subselect oder GROUP BY oder ...
bot or not bot
- datenbank
Hallo,
ich habe in meiner mySQL-DB eine Tabelle mit User Agents und in einer anderen Tabelle Reguläre Ausdrücke, die auf Bots überprüfen. Jeder Reguläre Ausdruck ist mit einem Zusatz versehen, ob es sich dabei um einen Bot oder einen Mensch handelt.
Folgende Abfrage gibt mir alle Bots zurück:
SELECT *
FROM (
SELECT counter
.id
, MIN( bots
.bot
) AS bot
, counter
.HTTP\_USER\_AGENT
FROM counter
LEFT JOIN counter\_bots
AS bots
ON counter
.HTTP\_USER\_AGENT
REGEXP bots
.regex
GROUP BY counter
.id
) AS data
WHERE bot
=1
Nun will ich aber die Unterscheidung zwischen Mensch und Bot in der Tabelle counter
cachen.
UPDATE counter
SET bot
= 0|1
Nur wie bekomme ich die Daten für das UPDATE? AFAIK kann ich kein Subselect, das auf die Daten der zu ändernden Tabelle zugreift) verwenden.
TIA
bot or not bot
Ich habe das Problem gelöst:
CREATE TEMPORARY TABLE tmp\_counter
SELECT *
FROM (
SELECT counter
.id
, IF(MIN(bots
.bot
),1,0) AS bot
FROM counter
LEFT JOIN counter\_bots
AS bots
ON counter
.HTTP\_USER\_AGENT
REGEXP bots
.regex
GROUP BY counter
.id
) AS data
;
UPDATE counter
JOIN tmp\_counter
ON tmp\_counter
.id
= counter
.id
SET counter
.bot
= tmp\_counter
.bot
;
SELECT * FROM counter
bot or not bot