Mysql Abfrage

Dieses Thema im Forum "Webentwicklung" wurde erstellt von peterpan, 19. Oktober 2008 .

Schlagworte:
  1. 19. Oktober 2008
    Hi,

    Ich habe folgendes problem.
    Ich habe 2 Tabelle nach dem folgenden Beispiel:

    Code:
    CREATE TABLE `penner_links` (
     `id` int(11) NOT NULL auto_increment,
     `name` varchar(255) NOT NULL,
     `link` varchar(64) NOT NULL,
     `today` int(11) NOT NULL,
     `total` int(11) NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Und

    Code:
    CREATE TABLE `penner_clicks` (
     `id` int(11) NOT NULL auto_increment,
     `link` int(11) NOT NULL,
     `ip` varchar(255) character set utf8 collate utf8_bin NOT NULL,
     `time` int(11) NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    Nun brauche ich eine Abfrage, die mir folgendes Ausgibt, penner_links.id und penner_links.link für den ersten daten satz, wo es keine reloadspeere für diese ip in penner_clicks gibt oder der time wert niedriger ist als der aktuelle timestamp.
    wobei penner_clicks.link ein foreignkey von penner_links.id ist.

    Mein Ansatz war bis jetzt:
    PHP:
    SELECT penner_links  . * ,  penner_clicks  . *
    FROM penner_links
    LEFT JOIN penner_clicks ON penner_links
    . id  penner_clicks . link
    WHERE 
    (
    (
    penner_clicks . id IS NULL
    )
    OR (
    penner_clicks . time  < ". $time ."  AND  penner_clicks . ip  '".$ip."' )
    )
    AND 
    penner_links . id  > 0
    LIMIT 0 
    1 ;
    Jedoch komme ich im Moment nicht weiter und hoffe auf eure Hilfe.

    mfg
    peterpan
     
  2. 19. Oktober 2008
    AW: Mysql Abfrage

    Also wie ich dem $time und $ip entnehme, soll die Abfrage ja wohl in eine PHP richtig?

    Dann würd ich das nicht in einem Query machen...
    Sondern per PHP mit if und else.. insofern ich dein vorhaben richtig verstanden habe...

    MfG
     
  3. 19. Oktober 2008
    AW: Mysql Abfrage

    jop, soll in php jedoch würde die abfrage in php deutlich mehr zeit und mysql abfragen benötigen als wenn alles über eine abfrage läuft.
    deshalb wollte ich erstmal die möglichkeit mit nur einer abfrage in erwägung ziehen nur komme ich da im moment nicht weiter.
     
  4. 19. Oktober 2008
    AW: Mysql Abfrage

    wie sieht das in sql aus?
     
  5. 19. Oktober 2008
    AW: Mysql Abfrage

    es gibt in der datenbank dann nen eintrag ala
    PHP:
    INSERT INTO  ` penner_clicks ` (` id ` ,` link ` ,` ip ` ,` time `)  VALUES  ( '' '".linkid."' '".ip des "klickers"."' '".zeit wann die reloadspeere vorbei ist."' )
    wenn geklickt wird, also soll entweder die zeit im letzten Eintrag für den link abgelaufen sein oder noch kein Eintrag dieser art vorhanden sein.

    EDIT:

    PHP:

    SELECT 
    ` penner_links ` . * , ` penner_clicks ` . *
    FROM  ` penner_links `
    LEFT JOIN  ` penner_clicks ON  ` penner_links `.` id ` = ` penner_clicks `.` link `
    WHERE 
    (
    (`
    penner_clicks `.` ip ` =  '127.0.0.1' ) AND  (` penner_clicks `.` time ` <  '1224442207' )
    OR
    (`
    penner_clicks `.` ip ` =  '127.0.0.1' ) AND  (` penner_clicks `.` id IS NULL // da ist das problem
    )
    AND `
    penner_links `.` id ` >  0
    ORDER BY 
    ` penner_links `.` today ASC
    die Abfrage funktioniert noch nicht, wenn noch kein Eintrag für die IP vorhanden ist,
    Daran hapert es im Moment.


    Hier ist nochmal ein Beispielsatz an Daten incl voller Struktur
    Für Link1 gibt es einen EinTrag in der "Reloadspeere", der abgelaufen ist und einer, der noch "blockiert"
    Für Link2 gibt es nur einen Abgelaufenen und für Link3 gibt es noch gar keinen Eintrag
    PHP:
    --  phpMyAdmin SQL Dump
    --  version 2.11.7
    --  http : //www.phpmyadmin.net
    --
    -- 
    Host localhost
    --  Erstellungszeit 19. Oktober 2008 um 20 : 43
    --  Server Version 5.0.51
    --  PHP - Version 5.2.6

    SET SQL_MODE
    = "NO_AUTO_VALUE_ON_ZERO" ;

    --
    -- 
    Datenbank : ` penner `
    --

    -- --------------------------------------------------------

    --
    -- 
    Tabellenstruktur für Tabelle  ` penner_clicks `
    --
    CREATE TABLE  IF  NOT EXISTS  ` penner_clicks ` (
      `
    id int ( 11 NOT NULL auto_increment ,
      `
    link int ( 11 NOT NULL ,
      `
    ip varchar ( 255 character set utf8 collate utf8_bin NOT NULL ,
      `
    time int ( 11 NOT NULL ,
      
    PRIMARY KEY   (` id `)
    ENGINE = MyISAM   DEFAULT  CHARSET = latin1 AUTO_INCREMENT = ;

    --
    -- 
    Daten für Tabelle  ` penner_clicks `
    --

    INSERT INTO  ` penner_clicks ` (` id `, ` link `, ` ip `, ` time `)  VALUES
    ( 1 1 '127.0.0.1' 1224432002 ),
    (
    2 1 '127.0.0.1' 1924442002 ),
    (
    3 2 '127.0.0.1' 1223442002 );

    -- --------------------------------------------------------

    --
    -- 
    Tabellenstruktur für Tabelle  ` penner_links `
    --

    CREATE TABLE  IF  NOT EXISTS  ` penner_links ` (
      `
    id int ( 11 NOT NULL auto_increment ,
      `
    name varchar ( 255 NOT NULL ,
      `
    link varchar ( 64 NOT NULL ,
      `
    today int ( 11 NOT NULL ,
      `
    total int ( 11 NOT NULL ,
      
    PRIMARY KEY   (` id `)
    ENGINE = MyISAM   DEFAULT  CHARSET = latin1 AUTO_INCREMENT = ;

    --
    -- 
    Daten für Tabelle  ` penner_links `
    --

    INSERT INTO  ` penner_links ` (` id `, ` name `, ` link `, ` today `, ` total `)  VALUES
    ( 1 'Peter' 'http://www.peter.de' 12 123 ),
    (
    2 'Rolf' 'http://www.rolf.de' 123 345 ),
    (
    3 'Hans' 'http://www.hans.de' 0 12 );
     
  6. 20. Oktober 2008
    AW: Mysql Abfrage

    sry für doppelpost,

    glaube ich habe jetzt selber ne lösung gefunden.

    vllt könnt ihr es mal auf logische fehler durch gucken etc.


    danke
    peterpan

    PHP:
    SELECT  ` penner_links `.` id `, ` penner_links `.` link `
    FROM  ` penner_links `
    LEFT JOIN  ` penner_clicks ON  ` penner_links `.` id ` = ` penner_clicks `.` link `
    WHERE 
    (
    (`
    penner_clicks `.` ip ` =  '".$ip."' ) AND (` penner_clicks `.` time ` <  '".$time."' )
    )
    OR 
    (
    ((`
    penner_clicks `.` ip ` <>  '".$ip."' ) OR (` penner_clicks `.` ip IS NULL ))
    AND 
    ((
    SELECT count ( * )  FROM  ` penner_clicks WHERE  ` penner_clicks `.` ip ` =  '".$ip."'  AND ` penner_clicks `.` link ` = ` penner_links `.` id `) =  )
    )
    AND `
    penner_links `.` id ` > 0
    ORDER BY 
    ` penner_links `.` today ASC
    LIMIT 0 
    1 ;
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.