Autor | Zpráva | ||
---|---|---|---|
igor Profil * |
#1 · Zasláno: 22. 11. 2014, 13:25:08
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 * |
#3 · Zasláno: 22. 11. 2014, 16:11:08
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 |
#4 · Zasláno: 22. 11. 2014, 16:19:26
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 |
#5 · Zasláno: 22. 11. 2014, 17:09:03
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 * |
#6 · Zasláno: 22. 11. 2014, 18:14:50
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 |
#7 · Zasláno: 22. 11. 2014, 19:41:32
V tom případě jsem to asi pochopil správně a platí to co jsem napsal poprvé :-)
|
||
igor Profil * |
#8 · Zasláno: 22. 11. 2014, 20:29:44
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 |
#9 · Zasláno: 23. 11. 2014, 02:00:53
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 * |
#10 · Zasláno: 24. 11. 2014, 08:13:23
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 |
#11 · Zasláno: 24. 11. 2014, 10:38:56
igor:
Jakým postupem se v posledních sloupcích stane z čísla 515.8 číslo 289? |
||
osvaldik Profil |
#12 · Zasláno: 24. 11. 2014, 10:43:17
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 ); INSERT INTO druha_tabulka SELECT * FROM prvni_tabulka |
||
osvaldik Profil |
#14 · Zasláno: 24. 11. 2014, 13:20:34
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 |
#15 · Zasláno: 24. 11. 2014, 13:26:19
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 |
#16 · Zasláno: 24. 11. 2014, 14:08:45
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 |
#17 · Zasláno: 24. 11. 2014, 15:11:05
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 |
#19 · Zasláno: 24. 11. 2014, 18:56:08
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 |
#20 · Zasláno: 24. 11. 2014, 19:22:31
bestik_63:
#1136 - Column count doesn't match value count at row 1 nedari se :-( |
||
bestik_63 Profil |
#21 · Zasláno: 24. 11. 2014, 19:28:45
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 |
#22 · Zasláno: 24. 11. 2014, 19:31:34
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 |
#24 · Zasláno: 24. 11. 2014, 21:02:16
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 |
#26 · Zasláno: 24. 11. 2014, 22:32:50
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 |
#29 · Zasláno: 24. 11. 2014, 23:36:38
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 |
#30 · Zasláno: 24. 11. 2014, 23:38:03
bestik_63:
ok diky |
||
Téma pokračuje na další straně.
|
0