BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- [SQL] Tabelleneinträge in WHERE Klausel übernehmen (http://www.black-board.net/thread.php?threadid=23555)


Geschrieben von phlox81 am 17.11.2008 um 14:16:

  [SQL] Tabelleneinträge in WHERE Klausel übernehmen

Also, ich habe 2 Tabellen:

bots und visits.

In bots stehen suchmuster um bots rauszufiltern (bot, Ask Jeeves, crawler etc.)

Nun möchte ich aus visits alle einträge, die keine bots laut useragent sind.
Natürlich kann ich nun aus bots per Hand ein NOT (useragent LIKE %bot% OR useragent LIKE %.. machen, aber könnte man das nicht auch in SQL eleganter lösen?

In bot steht nicht der genaue useragent, sondern auszüge davon, deshalb auch das LIKE.

phlox



Geschrieben von LX am 17.11.2008 um 16:13:

Achtung

Gib mal die Tabellenstruktur an und vielleicht ein paar Beispieldatensätze. Sonst kann zumindest ich mir schwer vorstellen, womit man's hier genau zu tun hat.



Geschrieben von phlox81 am 17.11.2008 um 16:41:

 

bots: id und ein Varchar feld für die bots.
sites: id, sitename, und useragent (beides varchars)

bots:
1, bot
2, Ask Jeves

sites:
234, index, msnbot/1.1 (+http://search.msn.com/msnbot.htm)
235, index, FireFox
etc...

So nun möchte ich alle Datensätze aus sites, wo es das Suchmuster aus bots nicht gibt.

Mir schwebt sowas vor:
SELECT * FROM sites WHERE useragent NOT LIKE %(SELECT botname FROM bots)%

Nur halt das für jeden Eintrag in Bots ein LIKE %$botname% erstellt wird.

phlox



Geschrieben von LX am 17.11.2008 um 18:31:

Achtung

Käme auf einen Versuch an, ob solche Schweinereien funktionieren:

code:
1:
2:
3:
4:
5:
SELECT *
    FROM sites
LEFT JOIN bots
    ON sites.useragent LIKE CONCAT('%',bots.name,'%')
WHERE bots.id IS NULL


Am besten wär's wohl aber, die Tabelle sites beim Befüllen bereits mit einem Flag "Bot oder nicht" zu versehen. Basierend auf bisher erkannten Suchmustern kannst du dieses Flag setzen, und wenn du später weitere Suchmuster hast, die einen Bot identifizieren, kannst du da auch im Nachhinein noch ein Skript drüber jagen, welches die einzelnen Hits, die noch nicht als Bot identifiziert wurden, markiert.



Geschrieben von phlox81 am 17.11.2008 um 19:00:

 

hm, ja so ein flag wäre natürlich auch was.
Und besser als den useragent jeweils voll rein zu hauen.

Ich glaub so mach ichs.


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH