ON DUPLICATE KEY UPDATE probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin vdm

kevin vdm

15/01/2011 18:15:41
Quote Anchor link
ok,
ik zou willen dat indien iemand een film wil toevoegen via een imdb url de query bekijkt of de film al in de database zit door de kolom imdb te vergelijken met de nieuwe link van de film ".$url." en indien de film bestaat de date in de database te updaten.
ik had zitten denken aan deze code:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<? php
mysql_query("INSERT INTO movies (name, rating, year, runtime, imdb)
                VALUES ('"
.$movie->title()."', '".$movie->rating()."', '".$movie->year()."', '".$movie->runtime()."', '".$url."') ON DUPLICATE KEY UPDATE name=VALUES('".$movie->title()."'), rating=VALUES('".$movie->rating()."'), year=VALUES('".$movie->year()."'), runtime=VALUES('".$movie->runtime()."'), imbd = VALUES('".$url."'");
?>


maar blijkbaar werkt het niet op de 1 of andere manier ziet er iemand een fout?
de fout is: Call to undefined function msql_query().

de tabel werkt ook met een auto increment van de kolom id

alvast bedankt
Gewijzigd op 15/01/2011 18:24:36 door Kevin vdm
 
PHP hulp

PHP hulp

22/12/2024 15:06:32
 
Jens V

Jens V

15/01/2011 18:19:20
Quote Anchor link
Als je mysql gebruikt, zou ik eens proberen de mysql_* functies aan te roepen, in plaats van de msql_* functies ;) Voor PostgreSQL is het pgsql_* en voor MS SQL-server is het mssql_*. Je kan ook best een kijken voor PDO. Daar ben je snel mee weg.
 
Noppes Homeland

Noppes Homeland

15/01/2011 18:20:24
Quote Anchor link
Les 1:
Schrijf je queries overzichtelijk uit en voer deze niet direct aan een _query functie met ken het toe aan een variabele, zodat je een combinatie kunt maken error + statement

Les 2:
Leer eens fouten intrepeteren, moge duidelijk zijn dat je een typo gemaakt hebt
je bedoelt waarschijnlijk
mysql_query of mssql_query

Les 3:
Raadpleeg dan ook eerst je handleiding wat betreft de syntaxt
 
Kevin vdm

kevin vdm

15/01/2011 18:23:54
Quote Anchor link
-_-' oeps blijkbaar een letter vergeten te typen...
wel, het probleem is dus dat hij als de film niet bestaat er ook geen nieuwe data insteekt.

Toevoeging op 15/01/2011 18:34:47:

ok, ik heb er dit van gemaakt:

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
<? php
$sqlm    =    "INSERT INTO movies (name, rating, year, runtime, imdb)
                VALUES ('"
.$movie->title()."', '".$movie->rating()."', '".$movie->year()."', '".$movie->runtime()."', '".$url."')
            ON DUPLICATE KEY UPDATE name=VALUES('"
.$movie->title()."'), rating=VALUES('".$movie->rating()."'), year=VALUES('".$movie->year()."'), runtime=VALUES('".$movie->runtime()."'), imbd = VALUES('".$url."')";


if(($result = mysql_query($sqlm)) === false)
{

    echo mysql_error();
}

else
{
    $auto = mysql_query($sqlm);
}


?>


de error is:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Vampires Suck'), rating=VALUES('3.3'), year=VALUES('2010'), imbd = VALUES('http' at ...
Gewijzigd op 15/01/2011 18:38:27 door kevin vdm
 
Noppes Homeland

Noppes Homeland

15/01/2011 18:43:35
 
Kevin vdm

kevin vdm

15/01/2011 19:13:20
Quote Anchor link
ok, ik zie dit staan dus dacht ik:

Here is an example of how to update multiple columns using values supplied in the INSERT statement. This assumes that column 'a' is the unique key.

INSERT INTO table (a,b,c,d,e) VALUES (1,2,3,4,5) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c), d=VALUES(d), e=VALUES(e);

This also works for multiple rows:

INSERT INTO table (a,b,c,d,e) VALUES (1,2,3,4,5), (6,7,8,9,10) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c), d=VALUES(d), e=VALUES(e);

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
<? php

$sqlm    =    "INSERT INTO movies
        (    name
,             rating
,             year
,             runtime
,             imdb
        )
VALUES         (    '"
.$movie->title()."'
,             '"
.$movie->rating()."'
,            '"
.$movie->year()."'
,            '"
.$movie->runtime()."', '".$url."'
        )
ON DUPLICATE KEY
UPDATE             id=LAST_INSERT_ID(id)
,            name=VALUES(name)
,            rating=VALUES(rating)
,            year=VALUES(year)
,            runtime=VALUES(runtime)"
;


if(($result = mysql_query($sqlm)) === false)
{

    echo mysql_error();
}

else
{
    $auto = mysql_query($sqlm);
}


?>


nu kijkt hij niet voor duplicates en voegt hij de row 2 keer toe, dit is men tabel:
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
CREATE TABLE IF NOT EXISTS `movies` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `imdb` varchar(80) NOT NULL,
  `year` int(5) NOT NULL,
  `poster` varchar(255) NOT NULL default 'imdbnotavailable.png',
  `runtime` int(4) NOT NULL,
  `budget` varchar(255) NOT NULL,
  `revenue` varchar(255) NOT NULL,
  `rating` decimal(10,1) NOT NULL,
  `cat1` varchar(20) NOT NULL,
  `cat2` varchar(20) NOT NULL,
  `cat3` varchar(20) NOT NULL,
  `cat4` varchar(20) NOT NULL,
  `cat5` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ;

en nu heb ik geen idee meer...
Gewijzigd op 15/01/2011 19:15:59 door kevin vdm
 
Noppes Homeland

Noppes Homeland

15/01/2011 19:52:42
Quote Anchor link
Je kunt beter werken met Engine InnoDB

Laat VALUES weg en zorg er gewoon voor de x met y matched

beetje verder door normaliseren kan ook geen kwaad
http://www.yapf.net/index.php/Database_ontwerp_101

En ik ga me toch afvragen of het je gaat lukken. Een ON DUPLICATE gaat af op de pimary key

Andere optie is een constraint te zetten en als je daar dan tegen aanloopt het record updaten
 
Kevin vdm

kevin vdm

15/01/2011 20:58:02
Quote Anchor link
voor de geinteresseerden die willen weten hoe ik het dan toch heb weten op te lossen:

dus eerst kijken of de record bestaat door te kijken naar de imdb link als ze bestaat dan updaten anders toevoegen.

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
<?

if(mysql_num_rows(mysql_query("SELECT  * FROM movies WHERE imdb='".$url."'"))){

    $auto = mysql_query("update movies WHERE imdb='".$url."' SET name='".$movie->title()."', rating='".$movie->rating()."', year='".$movie->year()."', runtime='".$movie->runtime()."'");
                
}

else
{
    $auto = mysql_query("INSERT INTO movies (name, rating, year, runtime, imdb)
                VALUES ('"
.$movie->title()."', '".$movie->rating()."', '".$movie->year()."', '".$movie->runtime()."', '".$url."')");
}


?>
 



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.