« 1 2 »
Autor Zpráva
igor
Profil *
Dobry den,

prosim o radu jak na zkopirovani pole "platbazaden" z prvni tabulky do druhe tabulky.
Prvni tabulka obsahuje ID (AUTO_INCREMENT) a TIME (timestamp CURRENT_TIMESTAMP).
Druha tabulka obsahuje ID (AUTO_INCREMENT) a DEN (YYYY-MM-DD).
Lze nejak data z pole "platbazaden" (prvni tabulky) prevest do druhe tabulky podle data aby se data z pole "platbazaden" pripsala do spravnych radku druhe tabulky podle dnu.
Je to proveditelne?
bestik_63
Profil
Já bych to asi dělal přes PHP.
Přidal bych do druhé tabulky sloupec "platbazaden". Načetl bych první tabulku převedl Timestamp na date a pak bych pro každý záznam použil příkaz něco ve stylu
$datum = date("Y-m-d",strtotime(Time)); // (Time z prvni tabulky)
$patba = platbazaden (Z první tabulky)
Update tabulka2 SET platbazaden=$platba....where DEN="$date"
igor
Profil *
bestik_63:
a na tohle jak: Načetl bych první tabulku převedl Timestamp na date ?
zatim se ucim, takze nektere veci prozatim netusim jak presne funguji
diky
juriad
Profil
INSERT INTO tabulka2
SELECT ID, DATE(`TIME`) den, SUM(platbazaden)
FROM tabulka1
GROUP BY den

Něco takového?
Do tabulka2 vloží záznamy z tabulka1 tak, že záznamy za každý jeden den budou sloučeny do jednoho.
bestik_63
Profil
Teďka ještě otázka. Trklo mě to po tom co napsal Juriad. Ta první tabulka obsahuje nějaké jednotlivé záznamy plateb a ta druhá má obsahovat sumu plateb za den? Protože jestli jo, tak co jsem napsal vůbec neberte vpotaz. V tom případě je to nesmysl.

K tomu převodu: převádíte tyto dva formáty
Time : TIMESTAMP - format: YYYY-MM-DD HH:MI:SS
DEN : DATE - format YYYY-MM-DD
to se dá provést : $datum = date("Y-m-d",strtotime(Time));

strtotime převede datum do Unix timestamp (počet sekund od 1.1. 1970). Funkce date() pak toto číslo převede na datum a "Y-m-d" je formát tohoto datumu (rok-měsíc-den).
igor
Profil *
bestik_63:
prvni tabulka "platbazaden" obsahuje jeden zaznam, ktery se uklada o pulnoci
druha tabulka ma obsahovat totez, akorat aby to souhlasilo datumove, jelikoz zaznamy jsou uz drivejsiho data
bestik_63
Profil
V tom případě jsem to asi pochopil správně a platí to co jsem napsal poprvé :-)
igor
Profil *
zkousim ten prikaz od juriad a rve me to:
#1136 - Column count doesn't match value count at row 1

s tim php to asi bude slozitejsi, zatim si s tim nevim rady jak to php ma cele vypadat
juriad
Profil
igor:
To byl jen nástřel. Pokud neřekneš víc podrobností, nemáme šanci lépe poradit.
V podstatě jsou na stole dvě možnosti:
1) vytváhnout data do PHP, transformovat je a vložit zpět do databáze
2) vytvořit select, který data transformuje do formátu druhé tabulky a pak použít klauzuli INSERT ... SELECT ...

Tabulky jsou shodné, ale jedna obsahuje sloupec typu DATETIME a druhá DATE. Data se mají přesunout z jedné do druhé.
Může v jednom dni být víc záznamů? Mají se nějak sloučit? Co s ID? Co s existujícími záznamy?
igor
Profil *
zkusim to bliz priblizit:

prvni tabulka
|ID|time|platbazaden
|283650|2014-11-21 23:59:59|515.8
|283936|2014-11-22 23:59:59|518.2
|284225|2014-11-23 23:59:59|520.7

platbazaden - pridava se jeden zaznam o pulnoci, ostatni pole jsou NULL

druha tabulka
|ID|den|pocetplateb
|678|2014-11-21|289
|679|2014-11-22|287
|680|2014-11-23|253

ID v tabulkach jsou rozdilne
tzn. potrebuji vlozit data z prvni tabulky (platbazaden) do druhe tak, aby se vlozila stejne datumove
Kajman
Profil
igor:
Jakým postupem se v posledních sloupcích stane z čísla 515.8 číslo 289?
osvaldik
Profil
pocetplateb - se taha z xml (nezavisle na prvni tabulce)
bestik_63
Profil
ahoj,
tak mě tento problém zajímal tak jsem si to zkusil doma a zde je výsledek:
CREATE TABLE `prvni_tabulka` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `platbazaden` int(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=284226 DEFAULT CHARSET=utf8;

INSERT INTO prvni_tabulka VALUES ( 283650, '2014-11-21 23:59:59.0', 516 );
INSERT INTO prvni_tabulka VALUES ( 283936, '2014-11-22 23:59:59.0', 518 );
INSERT INTO prvni_tabulka VALUES ( 284225, '2014-11-23 23:59:59.0', 521 );

CREATE TABLE `druha_tabulka` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `time` date NOT NULL,
  `platbazaden` int(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=284226 DEFAULT CHARSET=utf8;

INSERT INTO druha_tabulka VALUES ( 678, '2014-11-21', 289 );
INSERT INTO druha_tabulka VALUES ( 679, '2014-11-22', 287 );
INSERT INTO druha_tabulka VALUES ( 680, '2014-11-23', 253 );
pak jsem dal toto :
INSERT INTO druha_tabulka SELECT * FROM prvni_tabulka
a funguje, doufám že tak jak potřebuješ. Dokonce ten datum nemusíš nějak předělávat, MYSQL to udělá samo za tebe :-)
osvaldik
Profil
bestik_63:
diky za reakci
nevim co delam blbe ale hlasi me to:
#1136 - Column count doesn't match value count at row 1
juriad
Profil
igor:
Pořád neříkáš vše, nějaké sloupce v tabulkách zamlčuješ (říkáš, že jsou NULL, ale je nutné je uvést).
osvaldik
Profil
juriad:
omlouvam se, spatne sem precetl a uvedl
prvni tabulka obsahuje samozrejmne vicero sloupcu (chapal jsem, ze staci uvest jen ty co jsem uverejnil = selecet jen na platbazaden)

prvni tabulka cela:
|ID|time|platbazaden|cidlo1|cidlo2
|284221|2014-11-23 23:35:02|NULL|2|69.5
|284222|2014-11-23 23:45:02|NULL|1.81|70
|284223|2014-11-23 23:50:02|NULL|1.68|70
|284224|2014-11-23 23:55:02|NULL|1.75|70
|284225|2014-11-23 23:59:59|520.7|NULL|NULL
bestik_63
Profil
Pokud ti z první tabulky stačí překopírovat pouze sloupce : ID, time a platbazaden, tak ti stačí ten příkaz pouze upravit:
INSERT INTO druha_tabulka SELECT ID,time,platbazaden FROM prvni_tabulka

jinak musíš přidat do druhé tabulky sloupce cidlo1 a cidlo2 a pak překopírovat všechny hodnoty (ID|time|platbazaden|cidlo1|cidlo2 ). Na přidání sloupců použiješ příkaz ALTER
osvaldik
Profil
bestik_63:
INSERT INTO druha_tabulka SELECT platbazaden FROM prvni_tabulka
jo tohle chapu, takhle jsem to zkousel ale pridalo se az za data v druhe tabulce

ja bych to prave potreboval pridat zpetne podle dnu, jen sloupec platabazaden, aby ta tabulka vypadal nasledovne:

|ID|den|pocetplateb|platbazaden
|678|2014-11-21|289|515.8
|679|2014-11-22|287|518.2
|680|2014-11-23|253|520.7

ps: az ted sem si vsiml, ze pisu z jineho loginu (ten reg. je spravne)
bestik_63
Profil
V tom případě zkus ještě toto:

INSERT INTO druha_tabulka select id,DATE_FORMAT(time, "%Y-%m-%d"),SUM(platbazaden) from prvni_tabulka GROUP BY  DATE_FORMAT(time, "%d ")
osvaldik
Profil
bestik_63:
#1136 - Column count doesn't match value count at row 1
nedari se :-(
bestik_63
Profil
jo sorry, já zapoměl na ty dva sloupce:

INSERT INTO druha_tabulka select id,DATE_FORMAT(time, "%Y-%m-%d"),SUM(platbazaden),cidlo1,cidlo2  from prvni_tabulka GROUP BY  DATE_FORMAT(time, "%d ")

druha_tabulka musí mít tyto sloupce |ID|time|platbazaden|cidlo1|cidlo2
osvaldik
Profil
a bez nich to nepude?
bestik_63
Profil
No podle té hlášky to vypadá že v tabulce druha_tabulka jsou další sloupce o kterých jsi ještě nepsal, proto se to nepřekopírovalo. Problém je, že se stále nemůžeme domluvit co vlastně přesně chceš.
Nemůžeš mi tu vypsat pomocí příkazu CREATE TABLE... obě tabulky a napiš které sloupce chceš překopírovat?(nebo aspoň názvy sloupců druhe_tabulky) Protože takhle to budeme řešit ještě další 2 dny :-) Tento příkaz ti sql vygeneruje při exportu, pokud bys nevěděl :-)
osvaldik
Profil
prvni tabulka
== Struktura tabulky den

|------
|Pole|Typ|Nulový|Výchozí
|------
|//**id**//|int(11)|Ne|
|cidlo1|float|Ano|NULL
|cidlo2|float|Ano|NULL
|platbazaden|float|Ano|NULL
|time|timestamp|Ne|CURRENT_TIMESTAMP

druha tabulka
== Struktura tabulky denni

|------
|Pole|Typ|Nulový|Výchozí
|------
|//**id**//|int(11)|Ne|
|den|date|Ne|
|pocetplateb|int(11)|Ne|
|platbazaden|int(11)|Ne|
|cidlo1|float|Ne|
|cidlo2|float|Ne|

z prvni tabulky "den" potrebuji prekopirovat "platbazaden" do druhe tabulky "denni" tak aby se zapsala zpetne podle daneho dne kdy byl zaznam vytvoren
omlouvam se za mou negramotnost
bestik_63
Profil
No to je přesně ono. Proto to nefunguje. Pořadí sloupců je jiné a každá tabulka má jiný počet sloupců. Nicméně podle toho co jste psal dříve a co tu vidím, pořád nabývám dojmu, že první tabulka obsahuje jednotlivé platby a ta druhá souhrn jednotlivých plateb za den. A na to se musí příkaz ještě modifikovat:

INSERT INTO druha_tabulka select id,DATE_FORMAT(time, "%Y-%m-%d"),count(platbazaden),SUM(platbazaden),cidlo1,cidlo2  from prvni_tabulka GROUP BY  DATE_FORMAT(time, "%d ")

Sečte platby za každý den a zapíše do tabulky 2 tabulku s tímto schématem:
1. sloupec : ID
2. sloupec : datum (rok-měsíc-den)
3. sloupec : počet plateb za den
4. sloupec : suma jednotlivých plateb za den.
5. sloupec : cidlo 1
6. sloupec : cidlo 2

jinak mě tento příklad taky pěkně poučil, takže vpoho. Člověk se pořád učí :-)
osvaldik
Profil
bestik_63:
poradi sloupcu - netusil jsem, ze to ma vliv
prvni tabulka "platbazaden" je souhrn vsech plateb a je to jeden zaznam, ktery se uklada o pulnoci
druha tabulka ma o jeden sloupec vic = "pocetplateb" (ten se tam vklada na konci dne z xml)

prvni tabulka "platbazaden" - potrebuji ten jeden zaznam, ktery je ulozen ve 23:59:59 dostat do druhe tabulky zpetne dle pole "den", tak aby vycetlo z prvni tabulky den vlozeni hodnoty "platbazaden" a podle pole z druhe tabulky "den" uspesne zapsalo

prikaz ktery jste posilal, vlozi hodnoty za stavaji data

asi to spatne popisuju :-(
bestik_63
Profil
aha takže takto:
máme 2 tabulky:
prvni tabulka :
|ID|time|platbazaden|cidlo1|cidlo2
|284221|2014-11-23 23:35:02|NULL|2|69.5
|284222|2014-11-23 23:45:02|NULL|1.81|70
|284223|2014-11-23 23:50:02|NULL|1.68|70
|284224|2014-11-23 23:55:02|NULL|1.75|70
|284225|2014-11-23 23:59:59|520.7|NULL|NULL

druha tabulka :
|ID|den|pocetplateb|platbazaden
|678|2014-11-21|289|515.8
|679|2014-11-22|287|518.2
|680|2014-11-23|253|520.7

pokud najdu v první tabulce platbazaden=nejaka hodnota (ne null) s časem např. 2014-11-23 23:59:59 (ID 284225), tento datum porovnám se záznamy v druhé tabulce a bude souhlasit datum 2014-11-23 (ID 680), pak provedu update hodnoty platbazaden (puvodne tam asi bude null apod.0)?
osvaldik
Profil
jeste priblizim, melo byt jiz ok
druha tabulka je vychozim stavu obsahuje jen 3 sloupce

druha tabulka :
|ID|den|pocetplateb
|678|2014-11-21|289
|679|2014-11-22|287
|680|2014-11-23|253

tohle by mel byt finalni stav druhe tabulky
druha tabulka :
|ID|den|pocetplateb|platbazaden
|678|2014-11-21|289|515.8
|679|2014-11-22|287|518.2
|680|2014-11-23|253|520.7

kdy "platbazaden"se bere z prvni tabulky:
pokud najdu v první tabulce platbazaden=nejaka hodnota (ne null) s časem např. 2014-11-23 23:59:59 (ID 284225), tak ho vlozim do noveho sloupce "platbazaden" v druhe tabulce aby souhlasil datum
bestik_63
Profil
no, tak teďka už to konečně chápu, ale už jdu chrápat. Manželka naléhá :-) zítra na to kouknu :-) jestli mě někdo nepředběhne :-)
osvaldik
Profil
bestik_63:
ok diky
« 1 2 »

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: