UPDATE tabulky se Selectem – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

UPDATE tabulky se Selectem – MySQL – Fórum – Programujte.comUPDATE tabulky se Selectem – MySQL – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
marthy0
Duch
31. 10. 2012   #1
-
0
-

Dobrý den, potřeboval bych helfnout s updatem tabulky v mysql. Na základě selectu chci updatenout data v jiné tabulce. V tabulce jos_saves mám uložené player_id a k nim statistiky. Potřebuju doplnit data ve sloupci branky na základě selectu, kterým natáhnu data z jiné tabulky.

Tabulka jos_saves

player_id zakroky branky uspesnost
49 NULL NULL 0
20 NULL NULL 0
46 NULL NULL 0
5 NULL NULL 0
68 NULL NULL 0
88 NULL NULL 0
136 NULL NULL 0

Select na výpis branek:

SELECT jos_saves.player_id, sum( jos_joomleague_match_events.event_sum ) as branek
FROM jos_saves
LEFT OUTER JOIN jos_joomleague_match_events ON jos_joomleague_match_events.player_id = jos_saves.player_id
WHERE (
jos_joomleague_match_events.event_type_id =8
)
GROUP BY jos_saves.player_id

Výstup ze selectu:

player_id branek
5 3
68 3
136 4

Celé query na základě, kterého bych chtěl do tabulky jos_saves natáhnout zákroky na základě selectu jsem napsal takto, je to ovšem syntakticky špatně:

update jos_saves
set jos_saves.zakroky=sum( jos_joomleague_match_events.event_sum )

SELECT jos_saves.player_id, sum( jos_joomleague_match_events.event_sum ) AS branek
FROM jos_saves
LEFT OUTER JOIN jos_joomleague_match_events ON jos_joomleague_match_events.player_id = jos_saves.player_id
WHERE (
jos_joomleague_match_events.event_type_id =8)
group by jos_saves.player_id

Nahlásit jako SPAM
IP: 193.85.210.–
Reklama
Reklama
KIIV+42
God of flame
31. 10. 2012   #2
-
0
-

neprohlizel sem co presne potrebujes... muzes zkusit  insert into ... select ...  +  on duplicate key update ...   ale je to mirnej hack :)

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marthy0
Duch
31. 10. 2012   #3
-
0
-

#2 KIIV
Díky za odpověď. Takže pokud to udělám nějak takto, tak dotaz proběhne ale hodnoty se nenaplní...mám správně tu klauzulu on duplicate key update?

insert into jos_saves (jos_saves.player_id,jos_saves.branky )
SELECT jos_saves.player_id,sum( jos_joomleague_match_events.event_sum )
FROM jos_saves
LEFT JOIN jos_joomleague_match_events ON jos_joomleague_match_events.player_id = jos_saves.player_id
WHERE (jos_joomleague_match_events.event_type_id =7)
group by jos_saves.player_id
ON DUPLICATE KEY UPDATE jos_saves.player_id=jos_saves.player_id
Nahlásit jako SPAM
IP: 193.85.210.–
marthy0
Duch
31. 10. 2012   #4
-
0
-

tak už mi to jede, výsledek je však ten, že se přidají další řádky s hodnotama, já bych potřewboval doplnit ty původní...

Nahlásit jako SPAM
IP: 193.85.210.–
KIIV+42
God of flame
31. 10. 2012   #5
-
0
-

to bude pak muset omezit co vraci select ... aby nevracel vic nez tam uz je (jinak ten insert samozrejme hodnoty vlozi pokud uz neexistujou)

mozna nedavat left join ale inner join ci tak nejak

EDIT: a nebo nemas na tom player_id unikatni/primarni klic (duplicate key znamena duplikatni klic ...)

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marthy
~ Anonymní uživatel
7 příspěvků
31. 10. 2012   #6
-
0
-

#5 KIIV
Ano neměl, teď jsem ho přidal a po spuštění query mi to neudělá s tabulkou nic, query projde ale změni 0 záznamů.

Nahlásit jako SPAM
IP: 193.85.210.–
KIIV+42
God of flame
31. 10. 2012   #7
-
0
-

mozna by to chtelo nejakej vzorek dat a ty tabulky

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marthy
~ Anonymní uživatel
7 příspěvků
31. 10. 2012   #8
-
0
-
Nahlásit jako SPAM
IP: 193.85.210.–
marthy
~ Anonymní uživatel
7 příspěvků
31. 10. 2012   #9
-
0
-

Nevím jestli jsem pocohpil s těmi klíči, mám primary key na player_id, aktualizoval jsem dotaz, ovšem stále data nedoplní:

INSERT INTO jos_saves (jos_saves.player_id,jos_saves.branky )
SELECT jos_saves.player_id, sum( jos_joomleague_match_events.event_sum )
FROM jos_saves
LEFT OUTER JOIN jos_joomleague_match_events ON jos_saves.player_id = jos_joomleague_match_events.player_id
WHERE jos_joomleague_match_events.event_type_id =7
AND jos_joomleague_match_events.project_id =7
GROUP BY jos_saves.player_id
ON DUPLICATE KEY UPDATE jos_saves.player_id=jos_saves.player_id

V tom souboru jsou dvě tabulky jos_joomleague_match_events a jos_saves

Nahlásit jako SPAM
IP: 193.85.210.–
KIIV+42
God of flame
31. 10. 2012   #10
-
0
-

ON DUPLICATE KEY UPDATE jos_saves.branky= suma
(tu nejak pekne pojmenovat at to nemusis opisovat cele ---  SELECT jos_saves.player_id, sum( jos_joomleague_match_events.event_sum ) as suma ---)

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Podobná vlákna

Update tabulky — založil Pebble

Update tabulky — založil Pebble

Update join tabulky — založil rimi

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý