Molly: MYSQL Abfrage von bestimmten Datum

Ich habe ein date und ein ip Feld. Ich möchte nun alle IP Nummern eines bestimmten Tages ermitteln. Eine Liste aller IPs ohen Tag, ermittle ich so:

SELECT ip from table group by ip

wenn ich sie abe rnun vom 10.01.2014 haben möchte, verstehe ich die Seite

http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html

nicht ganz. Bzw. finde nicht den richtigen Befehl.

Versuch, der leide rnicht zum Erfolg führte...

SELECT ip from table WHERE date <= date('2014-01-10', 'YYYY-MM-DD') group by ip

  1. Nachtrag:

    date > '2014-01-10 00:00:0' AND date < '2014-01-10 23:59:59'

    so würde es theoretisch gehen, doch ist bestimmt nicht die exakte Lösung?

    1. Tach!

      date > '2014-01-10 00:00:0' AND date < '2014-01-10 23:59:59'
      so würde es theoretisch gehen, doch ist bestimmt nicht die exakte Lösung?

      date BETWEEN '2014-01-10 00:00:00' AND '2014-01-10 23:59:59'
      wäre eine Alternative.

      dedlfix.

  2. SELECT ip from table group by ip

    Ich bin mir nicht sicher, ob hier nicht DISTINCT besser wär:

    SELECT DISTINCT  
    	`table`.`ip`  
    FROM  
    	`table`;  
    
    

    wenn ich sie abe rnun vom 10.01.2014 haben möchte, verstehe ich die Seite

    http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html

    nicht ganz. Bzw. finde nicht den richtigen Befehl.

    Es gibt Unterschiede zwischen Date und DateTime ;)
    (Deswegen find ich auch den Namen des Feldes schlecht gewählt)

    SELECT DISTINCT  
    	`table`.`ip`  
    FROM  
    	`table`  
    WHERE  
    	DATE(`table`.`date`) == '2013-08-30';
    

    (Ich hab jetzt DISTINCT genommen, schreibt sich kürzer)

    DATE(field) ist ein type cast, welches/welcher das Feld field auf sein Datum (Jahr+Monat+Tag) reduziert.

    MfG
    bubble

    --
    If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
    1. Tach!

      WHERE
      DATE(table.date) == '2013-08-30';
      DATE(field) ist ein type cast, welches/welcher das Feld field auf sein Datum (Jahr+Monat+Tag) reduziert.

      Ein Typecast ist DATE() nicht, sondern eine Funktion. Sie tut zwar das gewünschte, aber das kann sich negativ auf die Geschwindigkeit auswirken. Wenn MySQL keine Optimierung vornimmt, wird diese Funktion auf jeden Datensatz angewendet, ohne dass ein Index zum Einsatz kommen kann (sofern einer auf date vorhanden ist). Bei wenigen Datensätzen fällt das jedoch nicht ins Gewicht. Zur Verbesserung der Geschwindigkeit wäre es günstig, statt der Funktion den BETWEEN-Operator zu nehmen. Der operiert dann mit einer vollständigen Zeitangabe, also auch mit dem gesamten Feldinhalt, und damit ist dann wieder ein Index verwendbar.

      dedlfix.