bot or not bot: UPDATE mit Subselect oder GROUP BY oder ...

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

  1. 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