Autor | Zpráva | ||
---|---|---|---|
czechiaa Profil |
Ahojte,
řeším problém - pro mnohé bude primitivní, ale já si s ním s*ru už dvě noci :X .. mám dvě tabulky uzivatele | nick | hodnota1 | hodnota2 | hodnota3 | pepa | 100 | 100 | 100 | franta | 100 | 100 | 100 | a veci | id | hodnota1 | hodnota2 | hodnota 3 | 1 | 30 | 40 | 50 | 2 | 80 | 40 | 50 | a nyní problém - potřeboval bych, aby se hodnoty věci 1 přidali pepovým hodnotám. Tzn. hodnota1 (věci) se přidá pepově hodnotě1 .. hodnota2 (věci) se přidá (pepově) hodnotě2 .. atd. Zkoušel jsem to přes SELECT, sloučení a poté UPDATE, ale nikdy to nevyšlo a nyní chci začít todle řešit od začátku, má někdo nějakej nápad? Postačí mi i prostě popostrčení, jak dotaz konstruovat. Potřebuju pouze popošťouchnout s dotazem, zbytek zvládnu ;) Předem děkuju za reakce :) |
||
Tori Profil |
edit: Původně jsem to napsala celé, ale když chcete jen pošťouchnout, tak tedy: UNION ALL (oba samostatné dotazy), a nad výsledkem SELECT + SUM. ;)
Sloupce uzivatel.hodnota1 a veci.hodnota1 , + ostatní páry, by měly mít kompatibilní datové typy.
|
||
czechiaa Profil |
#3 · Zasláno: 16. 10. 2013, 21:05:17
A nemáte to ještě napsané celé? v tomdle se maličko ztrácím O:)
|
||
Tori Profil |
SELECT SUM(hodnota1), SUM... FROM ((SELECT hodnota1, ... FROM uzivatele WHERE... ) UNION ALL (SELECT hodnota1, ... FROM veci WHERE...) ORDER BY NULL) tmp 2. možná nebude potřeba ORDER BY NULL (nepamatuju si z hlavy, jestli se defaultně řadí nebo ne, najděte si to v man.) - a pokud ne, tak jsou zbytečné i závorky okolo těch dvou poddotazů s WHERE. Okolo celého UNION ale musí závorky zůstat. 3. páry stejnojmenných sloupců (uzivatele.hodnota1 + veci.hodnota1) musí mít stejný nebo podobný datový typ. |
||
czechiaa Profil |
#5 · Zasláno: 17. 10. 2013, 07:19:48
1. A to z jakého důvodu? (Ptám se informativně)
2. Man. prozkoumám ;) 3. Ani, to mají ;- Osobně jsem si to představoval, že to bude jednodušší. Na internetu je mnoho příkladů a návodu na různé INSERTy, SELECTy a UPDATy, které zvládám, ale orientace a pochopení tohoto dotazu je pro mě celkem oříšek. Bohužel jsem ani takovýto dotaz nikde nenašel, abych se ho pokusil nějak poskládat. btw. díky ;-) |
||
Tori Profil |
Jeden
SELECT vám udělá tabulku dat. Ze SELECT neco a SELECT neco jineho vám vzniknou dvě tabulky a UNION je slepí dohromady, aby se s nimi dalo pracovat jako s jedinou dlouhou. Ad aliasy - zkusila jsem si to a alias musí určitě mít celý ten union, doplnila jsem do [#4]. Jinak zkuste se na větším vzorku dat podívat na výsledky EXPLAIN (počet použitých řádků, klíče, rychlost dotazu), jestli by nebylo efektivnější sčítat to i v poddotazech (tj. SUM(hodnota1) as hodnota1 .. FROM uzivatele ). A neni zač. :)
|
||
Kajman Profil |
#7 · Zasláno: 17. 10. 2013, 07:48:37
czechiaa:
Ten součet se má trvale uložit do řádku s pepou nebo to chcete jen vypsat? |
||
czechiaa Profil |
#8 · Zasláno: 17. 10. 2013, 10:04:41
Tori:
S tímhle už to postavit zvládnu, snad :-) odpoledne to vyzkouším. ;-) Kajman: Ten součet se má uložit do pepových řádků :-) Až teď jsem si uvědomil, že Tori mi sice poskytla návod, ale na SELECT :-( Já bych potřeboval nejspíše UPDATE :-( |
||
Tori Profil |
#9 · Zasláno: 17. 10. 2013, 10:47:08
To by mělo být jednodušší. Asi nějak takhle? (doufám, že to bude sumovat správně, nemůžu to teď zkusit)
UPDATE uzivatele u, veci v SET u.hodnota1 = u.hodnota1 + SUM(v.hodnota1), ... WHERE u.nick = pepa AND v.id = 1 |
||
czechiaa Profil |
#10 · Zasláno: 17. 10. 2013, 11:02:42
Tori:
Toto vypadá správně, bohužel nyní nemám přístup na pc, takže vyzkouším odpoledne a pošlu reakci ;-) |
||
Kajman Profil |
#11 · Zasláno: 17. 10. 2013, 11:14:46
Spíše to bude něco jako
UPDATE uzivatele u, veci v SET u.hodnota1 = Ifnull(u.hodnota1, 0) + Ifnull(v.hodnota1, 0), u.hodnota2 = Ifnull(u.hodnota2, 0) + Ifnull(v.hodnota2, 0), u.hodnota3 = Ifnull(u.hodnota3, 0) + Ifnull(v.hodnota3, 0) WHERE u.nick = 'pepa' AND v.id = 1 Ale čísla ve sloupcích zavání špatným nvárhem. |
||
czechiaa Profil |
Jak jako "špatným návrhem"? :O Jestli jde o to, jak se nazývají sloupce, tak je to opravdu tak lepší. Protože vlastně uživatel má sloupec, "peníze" a potřebují přičíst "peníze" z tabulky věcí dle ID ;-) Lépe se v tom orientuj, tedy osobně pro mě :-) .. Ale jinak díky za další vadiantu, vyzkouším obě a dám vědět :-)
A jinak - dělám si webovky pro zábavu, takze takovéhle věci zatím neřeším ;-) a není snad lepší to tahat z jedné tabulky, něž ze tří? ;-) |
||
Časová prodleva: 11 let
|
0