Toon posts:

[MySQL] Query fout?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben afgestapt van de import functie van MySQL en een script gebouwd op de Update functie uit tevoeren van een andere tabel af met prijzen/artikelnrs.

Ik krijg hiermee de volgende fout (Script code staat onderaan ) :

Connected to MySQL server
Opened database "barracudac"

Invalid query: You have an error in your SQL syntax near 'products_temp SET products.products_price=products_temp.price WHERE products.pro' at line 1


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$link = mysql_connect("database.widexs.nl","xxxxxxxxx","xxxxxxxxxxx");
if(! $link)
        die("Could not connect to MySQL");
else
        print("Connected to MySQL server<P>");
$database = "xxxxxxxxxxx";
mysql_select_db($database)
        or die ("could not open $database: ".mysql_error() );
print "Opened database \"$database\"<P>";

$result = mysql_query("UPDATE products,products_temp SET 
products.products_price=products_temp.price 
WHERE products.products_model=products_temp.products_model") 
or 
die("Invalid query: " . mysql_error());


mysql_close($link);
print "database closed";
?>

[ Voor 37% gewijzigd door Verwijderd op 21-12-2003 17:02 ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Je kan maar 1 tabel tegelijk updaten, niet twee zoals je nu probeert.

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Topicstarter
Okee ik hoef er ook maar 1 te updaten a.h.v. data van de andere (products_temp)
Hoe zou hij dan moeten worden ?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Beetje basic he?
Verwijderd schreef op 21 december 2003 @ 17:03:
Okee ik hoef er ook maar 1 te updaten a.h.v. data van de andere (products_temp)
Hoe zou hij dan moeten worden ?
Wat dacht je van die komma en die 2e tabel weghalen?

[ Voor 90% gewijzigd door curry684 op 21-12-2003 17:04 ]

Professionele website nodig?


Verwijderd

Topicstarter
Dat gaat niet dat had ik al geprobeerd en dan krijg ik de volgende error :

Invalid query: Unknown table 'products_temp' in where clause

  • Brothar
  • Registratie: Oktober 2000
  • Laatst online: 04-02 09:14

Brothar

meester

Bij Oracle is/was sprake van "Update ... From ..." als ik me goed herinner.
Zou MySql dat zoveel anders doen ?

En anders: is het een oplossing àlle waarden in de tabel te gooien, en later met een delete de onzin te verwijderen ?(oké, omslachtig, maar als het je brengt waar je wil wezen ..).

eagle


Verwijderd

Topicstarter
De code is/zou goed moeten zijn dit is a.h.v een voorbeeld mysql script en zou moeten werken.
Ook volgens de MySQL manual maar er iets niet goed.
Copy en dan delete is niet de oplossing in dit geval.

Verwijderd

Topicstarter
Ik heb hier volgende stukje code om een table field up te daten met waarden uit andere tabel in zelfde database.
Dit stukje code is echter voor mysql 4.x (Deze kan 2 tables updaten tegelijktijd)
dit moet echter draaien op een mysql 3.x server.
Iemand die de SQL query om kan zetten ?

UPDATE products,products_temp SET products.products_price=products_temp.price WHERE
products.products_model=products_temp.products_model

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dit kan niet in 1 query in mysql 3.x

Wat je zou kunnen doen is de prijzen met je applicatie uitwerken of een insert into ... select uitvoeren. Als er dus in je products_temp exact dezelfde producten zitten, maar dan met een andere prijs, is het simpel, dan doe je alleen:
code:
1
2
TRUNCATE products;
INSERT INTO products SELECT * FROM products_temp;


Als je products en products_temp moet mergen kan je iets als dit doen:
code:
1
2
3
4
5
6
CREATE TABLE new_products LIKE products;
INSERT INTO new_products SELECT products.products_model, ..., 
     IFNULL(products_temp.price, products.price) AS price
     FROM products LEFT JOIN products_temp USING (products_model);
DROP TABLE products;
ALTER TABLE new_products RENAME TO products;

[ Voor 3% gewijzigd door ACM op 22-12-2003 11:20 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Anders open je ff niet voor iedere scheet een nieuw topic. Merged met vorige topic (die ook al in je topic daarvoor door had gekund).

Professionele website nodig?


Verwijderd

Topicstarter
ACM schreef op 22 december 2003 @ 11:19:
Dit kan niet in 1 query in mysql 3.x

Wat je zou kunnen doen is de prijzen met je applicatie uitwerken of een insert into ... select uitvoeren. Als er dus in je products_temp exact dezelfde producten zitten, maar dan met een andere prijs, is het simpel, dan doe je alleen:
code:
1
2
TRUNCATE products;
INSERT INTO products SELECT * FROM products_temp;


Als je products en products_temp moet mergen kan je iets als dit doen:
code:
1
2
3
4
5
6
CREATE TABLE new_products LIKE products;
INSERT INTO new_products SELECT products.products_model, ..., 
     IFNULL(products_temp.price, products.price) AS price
     FROM products LEFT JOIN products_temp USING (products_model);
DROP TABLE products;
ALTER TABLE new_products RENAME TO products;
Produkten in products_temp zien niet precies exact als de andere product table ( in products_temp zitten er ca. 1000 die niet in de products nodig zijn)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dan werk je er in je php code de prijzen uit, ala:
select * from temp, prod where temp = prod
while($row = ...)
// doe een update op products

Of, als je mijn voorbeeld wilt gebruiken, je filtert die eruit met een conditionele left join ipv de huidige left join (wat als het goed is al goed gaat in de 2e query trouwens...).

Maar je moet even zelf verder werken met de gegeven voorbeelden, de mijne zijn redelijk algemeen en niet perse toepasbaar of precies voor jou te kopieren.

[ Voor 29% gewijzigd door ACM op 22-12-2003 11:56 ]


Verwijderd

Topicstarter
ACM schreef op 22 december 2003 @ 11:55:
Dan werk je er in je php code de prijzen uit, ala:
select * from temp, prod where temp = prod
while($row = ...)
// doe een update op products

Of, als je mijn voorbeeld wilt gebruiken, je filtert die eruit met een conditionele left join ipv de huidige left join (wat als het goed is al goed gaat in de 2e query trouwens...).

Maar je moet even zelf verder werken met de gegeven voorbeelden, de mijne zijn redelijk algemeen en niet perse toepasbaar of precies voor jou te kopieren.
ACM : Zit je online op ICQ of MSN dan kan je me mischien nog tikkie verder helpen bij eerste statement krijg ik nl al een SQL fout
Pagina: 1