Datum vergelijken xml en mysql

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ferdi R

Ferdi R

26/08/2010 14:57:00
Quote Anchor link
Hoi,

Ik haal gegevens uit een xml bestand wat goed werkt maar 60 seconden later wil ik de gegevens weer op halen uit de xml en alleen de nieuwe gegevens met datum moet dan worden toegevoegt in de database. Ik krijg het niet werkend omdat het script gewoon weer alles in de database plaatst dus dubbel.

Het gaat dus om de onderste if()
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
foreach($xml->channel->item as $item)
{

    $titel = mysql_real_escape_string($item->title);
    $omschrijving = mysql_real_escape_string($item->description);
    $datum = mysql_real_escape_string($item->pubDate);
    $link = mysql_real_escape_string($item->link);  
    $geoChildren = $item->children('http://www.w3.org/2003/01/geo/wgs84_pos#');
    $lat = mysql_real_escape_string($geoChildren->lat);
    $latt = mysql_real_escape_string($geoChildren->long);
    $ymapsChildren = $item->children('http://api.maps.yahoo.com/Maps/V1/AnnotatedMaps.xsd');
    $zoom = mysql_real_escape_string($ymapsChildren->ZoomLevel);
    
    $tijd = substr($datum, 17, 8);
    $jaar = substr($datum, 12, 4);
    $dag = substr($datum, 5, 2);
    
    if (substr($datum, 8, 3) == 'Aug'){ $maand = 8; }
    if (substr($datum, 8, 3) == 'Sep'){ $maand = 9; }
    if (substr($datum, 8, 3) == 'Okt'){ $maand = 10; }
    
    $datetime = $jaar.'-'.$maand.'-'.$dag.' '.$tijd;
    

      
    $sql = "SELECT datetime FROM meldingen ORDER by datetime DESC LIMIT 1";

    if(!$res = mysql_query($sql))
    {

        trigger_error(mysql_error().'<br />In query: '.$sql);
    }

    elseif(mysql_num_rows($res) == 0)
    {

        //$hoogstedatum = 0; //Database leeg
    }
    else
    {
        $row = mysql_fetch_assoc($res);
        
        if($row['datetime'] == '')
        {

            $hoogstedatum = 0;
        }

        else
        {
            $hoogstedatum = $row['datetime'];
        }

    }
  
    
    if($datetime > $hoogstedatum)// Aleen nieuwe datums toevoegen
    {
        $insert = "INSERT INTO meldingen (titel, omschrijving, datum, datetime, link, lat, latt, zoom) VALUES
        ('"
.$titel."', '".$omschrijving."', '".$datum."', '".$datetime."', '".$link."', '".$lat."', '".$latt."', '".$zoom."')";            
        mysql_query($insert)or die(mysql_error());
                
        echo 'gelukt';
    }
}

?>
 
PHP hulp

PHP hulp

29/11/2024 07:54:19
 
- SanThe -

- SanThe -

26/08/2010 15:07:49
Quote Anchor link
if (substr($datum, 8, 3) == 'Aug'){ $maand = 8; }

Dus jij vergelijkt bijvoorbeeld vandaag dit:
if($datetime > $hoogstedatum)
wordt dus dit:
if('2010-8-26 15:03' > '2010-08-26 15:03')

Ja, dat is groter.

Toevoeging op 26/08/2010 15:11:28:

Uiteraard er van uitgaande dat je een DATETIME veld gebruikt.
Gewijzigd op 26/08/2010 15:08:48 door - SanThe -
 
Ferdi R

Ferdi R

26/08/2010 16:04:11
Quote Anchor link
Ik gebruik een DATETIME veld, Dat klopt.
Ik heb het verandert if (substr($datum, 8, 3) == 'Aug'){ $maand = '08'; }

Ik heb de datums ook even weergegeven met een echo maar hij slaat nu alleen de eerste op.

2010-08-26 15:51:07 - 2010-08-26 14:13:37gelukt
2010-08-26 15:50:53 - 2010-08-26 15:51:07
2010-08-26 15:47:05 - 2010-08-26 15:51:07
2010-08-26 15:40:59 - 2010-08-26 15:51:07
2010-08-26 15:36:46 - 2010-08-26 15:51:07

De eerste rij komt uit de xml bestand en de tweede uit de database.

De datum 2010-08-26 14:13:37 is de hoogste datum uit de database, Nu slaat hij de eerste datum 2010-08-26 15:51:07 op maar vergelijkt de rest daar ook mee en daarom wordt de rest niet toegevoegt. is er een manier dat ik eerst 2010-08-26 15:36:46 kan toevoegen en dan de rest. dan zou het moeten werken.
 
John D

John D

26/08/2010 16:11:28
Quote Anchor link
http://en.wikipedia.org/wiki/Merge_%28SQL%29
INSERT ... ON DUPLICATE KEY UPDATE
Zorg voor een goeie key definitie en je hoeft verder niets te programmeren.

In Oracle SQL gebruik ik bijvoorbeeld dit:
MERGE INTO table_name USING table_reference ON (condition)
WHEN MATCHED THEN
UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN
INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...
 
- SanThe -

- SanThe -

26/08/2010 16:13:02
Quote Anchor link
Je volgorde is verkeerd.

Eerst de SELECT om $hoogstedatum te bepalen.
En dan pas de foreach($xml->channel->item as $item)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.