Fredyy: Problem für Mysql Profis

Hi,

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

[code=php]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;[/code]

Und

[code=php]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;
[/code]

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:

[code=mysql]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;[/code]

Jedoch komme ich im Moment nicht weiter und hoffe auf eure Hilfe.

mfg
peterpan

  1. Hallo,

    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.

    eine korrelierte Unterabfrage könnte Dir vermutlich helfen.

    Freundliche Grüße

    Vinzenz

    1. danke, dasshat mir schonmal sehr weiter geholfen, damit kamm ich nu zu dieser abfrage, evtl kan sie mal jemand auf logische fehler durch gucken.

      bis jetzt sieht es aus aus, als ob sie funktioniert.

      mfg
      fredyy

      SELECT `penner_links`. * , `penner_clicks`. *  
      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`  
      ) =0  
      )  
      )  
      )  
      AND `penner_links`.`id` >0  
      ORDER BY `penner_links`.`today` ASC  
      LIMIT 0 , 1