Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Aktualizace tabulky mysql

Zdravím,

mám takový dotaz jestli by někdo neporadil.
Mám tabulku v DB. přes CSV soubor aktualizuji jeden sloupec reference, na což je jednoduchá úprava :

$query = "UPDATE prod SET `prix`='".$se[$i][1]."' WHERE `reference`='".$se[$i][0]."'";

problém je ten, že pokud v CSV souboru je položka navíc o které nevím, tudíž není v DB tak se pochopitelně nezaktualizuje ( což ale bych tu položku potřeboval samozřejmě doplnit).
A zde je jádro věci, potřebuji docílit aby mi při aktualizaci příkladně výpis udělal :

123 - OK
234 - OK
567 - ERR ( není v DB )
789 - OK

Neporadil by prosím někdo? Moc díky

Předmět Autor Datum
to updatujes cez PHP? ak ano, tak po vykoani updatu zavolaj funkciu mysql_affected_rows() ktora ti…
emem 07.03.2012 20:33
emem
Netuším či je to možné, ale ja som nedávno riešil problém s aktualizáciou jednej tabuľky na MSSQL se…
pme 07.03.2012 20:40
pme
V podstatě jsou tam sloupce ID a číselná hodnota. Mění se číselné hodnoty dle ID. ID zůstává stejné.…
Ivo13 07.03.2012 20:51
Ivo13
Čiže Ty ich tam nechceš pridávaš? Len chceš aby si dostal hlášku, že niečo je navyše? Keby som to ma…
pme 07.03.2012 20:56
pme
přidávat nechci. stačil by mi výpis např : 123 - OK 234 - OK 567 - ERR ( není v DB ) 789 - OK Vědě…
Ivo13 07.03.2012 20:58
Ivo13
Doufám, že mysql to umí, jsem to za Oracle a to má klauzuli MERGE, což je něco jako : MERGE tabulka…
AZOR 07.03.2012 22:10
AZOR
REPLACE INTO tabulka1 (polia) SELECT polia FROM table_2;
wam_Spider007 08.03.2012 11:04
wam_Spider007
dik za vzdělávání v mysql i kdyz ho doufám nikdy nebudu potřebovat :D
AZOR 08.03.2012 21:20
AZOR
nikdy nevies, kedy sa ti one vedomosti zidu :-)
wam_Spider007 08.03.2012 21:32
wam_Spider007
0,44km2, 700obyvatel Vatikán v roce 1993 - jj, zeměpisářka řikala něco podobného, že se to muže nikd…
AZOR 08.03.2012 21:35
AZOR
Nejsem přes php moc odborník. S mysql_affected_rows() jsem se dostal nejdál tak, že mi to vypíše nap…
AZOR 07.03.2012 22:14
AZOR
no pokročil jsem kousek dál. problém je že je asi někde chybička. výsledný hodnoty mám : UPDATE pro…
Ivo13 07.03.2012 22:28
Ivo13
Prozkoumej, proč došlo při prvním dotazu k chybě - mysqli_affected_rows($link) vrátil -1. Nemáš chyb…
hynajs 08.03.2012 09:04
hynajs
ak sa da, pastni sem ten php kod ktorym to robis (a najlepsie do tagu code/php)
emem 08.03.2012 12:18
emem
Zasílám a díky za každou radu. code/php <? include("../../config.php"); $link = mysqli_connect(_DB_…
Ivo13 08.03.2012 22:57
Ivo13
Kdyz slysím "mysql" tak to typicky neni pefrormance-critical, co si tam ifem zkusit jestli ten zázna…
AZOR 08.03.2012 23:03
AZOR
najpr zavolas mysqli_affected_rows($link) a az potom mysqli_query($link, $query) ?? preto ti to hazd… poslední
emem 09.03.2012 08:01
emem

Netuším či je to možné, ale ja som nedávno riešil problém s aktualizáciou jednej tabuľky na MSSQL serveri, ktorú som dopĺňal/aktualizoval riadkami z inej tabuľky.
Ty to síce napĺňaš z csv súboru, ale princíp môjho riešenia bol nasledovný:
tabuľka1 -> vlož riadky do tabuľky2, ale len tie, ktoré sa nenachádzajú v tabuľke2, tzn. iba to čo je navyše/nové v tabuľke1.
Príkaz: INSERT INTO xxx FROM xx WHERE NOT EXISTS xxx.
No a potom možno to Tvoje UPDATE...
Keďže nepoznám štruktúru Tvojej tabuľky riešenie už musíš zvládnuť sám...

V podstatě jsou tam sloupce ID a číselná hodnota. Mění se číselné hodnoty dle ID. ID zůstává stejné. Pokud mám v tom CSV který dostanu nějaké ID navíc ( které bych zároveň potřeboval dostat do tabulky scriptem který mám, protože má vazbu na jiné položky, takže přidávání neřeším).

Jde více méně o to, abych zjistil že mi v CSV přibyla nějaká položka navíc a měl bych jí doplnit.

Nejsem přes php moc odborník. S mysql_affected_rows() jsem se dostal nejdál tak, že mi to vypíše např. update 1800 položek. Vím že v DB jich je 1798 a 2 jsou v csv navíc.

Čiže Ty ich tam nechceš pridávaš? Len chceš aby si dostal hlášku, že niečo je navyše? Keby som to mal v tabuľke - jednoduchý select - porovnanie a mám to, ale csv neviem...
Asi by som to naimportoval do pomocnej tabuľky, s tou už sa dajú omnoho ľahšie robiť sql dotazy...

Nejsem přes php moc odborník. S mysql_affected_rows() jsem se dostal nejdál tak, že mi to vypíše např. update 1800 položek. Vím že v DB jich je 1798 a 2 jsou v csv navíc

A kdy to voláš? Tech zpusobu je asi víc jak se dostat k těm datum, ne? Například to nainsertovat a zase si to proselektovat. Pak mužeš to affected_rows použít pro každý řádek a tedy bud tam bude 0 a nebyl tam a nebo 1 a byl tam.

no pokročil jsem kousek dál.
problém je že je asi někde chybička. výsledný hodnoty mám :

UPDATE prod SET `prix`='5' WHERE `reference`='B7911' vysledek: -1
UPDATE prod SET `prix`='5' WHERE `reference`='B79118' vysledek: 0
UPDATE prod SET `prix`='5' WHERE `reference`='B7921' vysledek: 0
UPDATE prod SET `prix`='5' WHERE `reference`='B79218' vysledek: 0
UPDATE prod SET `prix`='5' WHERE `reference`='999999999' vysledek: 0

hodnoty prix pokud změním, výsledek je identický. I přes to že došlo ke změně....
všechny položky v DB jsou mimo poslední.

dotaz na výsledek je : printf(" vysledek: %d\n", mysqli_affected_rows($link));

Zasílám a díky za každou radu.

code/php
<?
include("../../config.php");
$link = mysqli_connect(_DB_SERVER_,_DB_USER_,_DB_PASSWD_,_ DB_NAME_);
mysqli_query($link, " SET NAMES 'utf8' ");
mysqli_query($link, " SET CHARACTER SET charset_name 'utf8' ");

$map = file("../files/file.csv");

$i = 0;
while ($axe = $map[$i])
{
$se[$i] = explode(";", $map[$i]);

echo $query = "UPDATE prod SET `prix`='".$se[$i][1]."' WHERE `reference`='".$se[$i][0]."'";
printf(" vysledek: %d\n", mysqli_affected_rows($link));
echo "<br>";
mysqli_query($link, $query);
$i++;
}

mysqli_close($link);
?>
code/php

Kdyz slysím "mysql" tak to typicky neni pefrormance-critical, co si tam ifem zkusit jestli ten záznam existuje (náročnější, nicméně si troufnu tvrdit že v podoných kodech, které běží jednou pod sekundu je to celkem šumák) a podle toho se rozhodnout?

select count(*) from prod where reference = $se[neco];

IF >0 THEN $query = "UPDATE prod SET `prix`='".$se[$i][1]."' WHERE `reference`='".$se[$i][0]."'"; else
insert/zalogovani to co potřebujš

KISS = Keep it simple, silly

Zpět do poradny Odpovědět na původní otázku Nahoru