Problem für Mysql Profis
Fredyy
- datenbank
0 Vinzenz Mai0 Fredyy
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
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
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