#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 ` > 0ORDER 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 = 4 ; ---- 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 = 4 ; ---- 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 ); + Multi-Zitat Zitieren
#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 `) = 0 ) ) AND ` penner_links `.` id ` > 0 ORDER BY ` penner_links `.` today ` ASC LIMIT 0 , 1 ; + Multi-Zitat Zitieren