DB Update jedného stĺpca vo viacerých riadkoch

Programovacie jazyky, rady, poradňa...
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa Michaelo »

Zdravím,

potrebujem updatnuť data v DB, no v tabuľke je cez 70 riadkov a časom ich bude viac, preto by som potreboval nejaký update, kde by som nemusel ručne vypisovať všetky možnosti na samotný riadok.

Rozlišujem ich podľa ID a v DB potrebujem prepísať len jedinú hodnotu, stále v rovnakom stĺpci.
V DB mám stĺpce: ID, Zapnuté, Meno, Typ, Krajina, Obrázok a ja potrebujem updatnuť sĺpec Zapnuté na 0 alebo 1.
Možnosti v PHP sú vlastne robené cez ukryté checkboxy.

Rozmýšľam nad nejakým kódom cez while, lebo nič iné ma nenapdá, ale asi najlepšia možnosť by bolo použiť jQuery aby sa hodnota zmenila ihneď po kliknutí na danú možnosť, no z JA obecne som tupý ako poleno :lol:

Snáď ste pochopili čo vlastne potrebujem.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa BX »

Michaelo napísal:Snáď ste pochopili čo vlastne potrebujem.
Nie, pretože nevieme, akú databázu používaš. A ak máš nejakú SQL-like databázu, tak neviem, prečo píšeš o nejakých while cykloch a ešte aj jQuery
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa Michaelo »

Na to som zabudol. Je to MySQL 5.1 a preco to spominam?
Lebo nechcem mat v phpcku 70 riadkov (pricom ich moze byt aj viac, ak dana osoba prida dalsie moznosti) opakujuceho sa updatu len stale pre ine ID, preto som rozmyslal nad while, ale to nie je dobre riesenie.
Pre mna najlepsie by bolo samotne jQuery, ze ked klikne (vyberie) danu moznost, tak sa ihned v DB prepise ze moznost je povolena/zakazana (1/0).

Snad sa uz teraz chapeme.
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa S-player »

Kód: Vybrať všetko

UPDATE table SET zapnute = 1 WHERE zapnute = 0; #Pre všetkých userov
UPDATE table SET zapnute = 1 WHERE zapnute = 0 AND id = 999; #Len pre usera s id 999
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa harrison314 »

Michaelo napísal:Na to som zabudol. Je to MySQL 5.1 a preco to spominam?
Lebo nechcem mat v phpcku 70 riadkov (pricom ich moze byt aj viac, ak dana osoba prida dalsie moznosti) opakujuceho sa updatu len stale pre ine ID, preto som rozmyslal nad while, ale to nie je dobre riesenie.
Pre mna najlepsie by bolo samotne jQuery, ze ked klikne (vyberie) danu moznost, tak sa ihned v DB prepise ze moznost je povolena/zakazana (1/0).

Snad sa uz teraz chapeme.
To samozreme ide cez Ajax, a pouzijes query UPDATE table SET zapnute = 1 WHERE id = 45q pre usrea s id 25.
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa weroro »

Ak správne chápem, chceš napr. hromadne zmeniť hodnotu 0 na 1 v jednom stĺpci, vo vybraných ID (množstvo tých ID môže byť rôzne)? Prečo to robíš hromadne? Je to cronom spúšťaný script? Čo tým vlastne chceš dosiahnuť?

// harrison predbehol: Ale aj tak platí moja otázka ohľadne viacerých ID a s tým spojené riešenie.
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa S-player »

To samozreme ide cez Ajax, a pouzijes query UPDATE table SET zapnute = 1 WHERE id = 45q pre usrea s id 25.
Tak pre usera s id 25 asi nie :D
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa Michaelo »

Nie, ide vlastne o možnosti v hlasovaní, no je ich cez 50 a časom budú pribúdať ďalšie.
V administrácii máte zoznam všetkých možností s ich názvom a obrázkom a ak napr. vyberiete možnosti s ID 1, 2, 6, 8, 15, 16, 18, 19, 25, 35, 45 tak chcem, aby sa tým možnostiam zmenilo ZAPNUTE z 0 na 1 a ostatným aby sa to zmenilo na 0 (napr. ak ste nejakú možnosť mali zapnutú a potom ste ju vypli).

Neviem ako lepšie to vysvetliť.

Preto premýšľam nad jQuery, aby sa hneď po kliknutí na nejakú možnosť zmenila hodnota v DB a nerobiť to hromadne s nejakým submit tlačidlom.
Chápeme sa, či stále nie? :lol:


Harrison: ano to where chápem (to ma napadlo ako prvé), s DB trochu pracovať viem, no tuto ak by to bolo cez submit, tak by si mal napr odoslaných 40 zo 70 možností, ako by to poriešil jediný riaodk updatu?
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa S-player »

Čiže ty chceš hodiť listener v jQuery na každý checkbox a pri "zafajknutí" hneď zmeniť danú hodnotu áno? Podľa mňa je lepšie tam pridať nejaký SUMBIT ako si spomenul a zameniť to naraz už len z toho dôvodu ,že ak by sa niekto rozmyslel a zatvoril danú stránku/okno.
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa Michaelo »

Tak nejako som to chcel, hlavne ak by zabudol odoslať submit atď. Keďže tých možností bude veľa, tak aby nescrolloval hore alebo dole.

No to je jedno, môže byť aj cez submit, ale ako spraviť ten update, keď počet možností nie je fixný a v administrácii sa budú môcť pridávať ďalšie?
Predsa nebude stále upravovať aj PHP, to nie je veľmi vhodné, hlavne ak chalan PHP vôbec neovláda.
Asi tu hodím screen ako to vyzerá.

Lebo momentálne výpis možností je robený takto (hrubý kód, najprv nech funguje, potom ho budem zmenšovať a zefektívňovať):

Kód: Vybrať všetko

	echo "<table><tr class='vote_options'><td>
			<img src='".INFUSIONS."advanced_voting_system/images/nations/USA.png' width='30px'>
			<br>
			<img src='".INFUSIONS."advanced_voting_system/images/types/LT.png' width='30px'>
		</td><td>";
	$usa_light  = dbquery("SELECT * FROM ".VOT_OPTIONS." WHERE vot_type='lt' AND vot_nation='USA'");
	while ($usa_lt = dbarray($usa_light)) {
		echo "<label ".is_enabled($usa_lt['vot_id'])."><img src='".INFUSIONS."advanced_voting_system/images/".$usa_lt['vot_opt_img']."' width='90px'> <span class='tank-name'>".$usa_lt['vot_opt']."</span><input type='hidden' name='".$usa_lt['vot_id']."' value='0'><input type='checkbox' name='".$usa_lt['vot_id']."' value='1' hidden></label>";
	}


	echo "</td></tr>
		<tr class='vote_options'><td>
			<img src='".INFUSIONS."advanced_voting_system/images/nations/USA.png' width='30px'>
			<br>
			<img src='".INFUSIONS."advanced_voting_system/images/types/MT.png' width='30px'>
		</td><td>";
	$usa_med  = dbquery("SELECT * FROM ".VOT_OPTIONS." WHERE vot_type='mt' AND vot_nation='USA'");
	while ($usa_mt = dbarray($usa_med)) {
		echo "<label ".is_enabled($usa_mt['vot_id'])."><img src='".INFUSIONS."advanced_voting_system/images/".$usa_mt['vot_opt_img']."' width='90px'> <span class='tank-name'>".$usa_mt['vot_opt']."</span><input type='hidden' name='".$usa_mt['vot_id']."' value='0'><input type='checkbox' name='".$usa_mt['vot_id']."' value='1' hidden></label>";
	}


.
.
.
.
.
.

	echo "</td></tr></table>";
Takto nejako to vyzerá v administrácii:
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa harrison314 »

S-player napísal:
Tak pre usera s id 25 asi nie :D
Sory tak id tej polozky, unava robi svoje.

//autoeditácia príspevku (21 Okt 2013, 20:28)
Tu je jQUery "pseoudokod" musis ho dorobitúopravit aby to fungovalo spravne a k nemu PHP skrypt, ktory spravi update do db

Kód: Vybrať všetko

$(":checkbox").change(function(e){
   var ischecked = if($(this).is(':checked'))
  
    $.post("kam poslat",
    {
       user_id: 45, //teraz je tu user s id 45
       item_id: $(this).parent().child("input [name=itemId]").value(),
       Zapnute: ischecked
    });
  
})

Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa Michaelo »

Nevšimol som si tvoj edit.
Aj tak vďaka za kód, no už pár hodín to mám plne funkčné presne tak, ako som to chcel mať (cez jQuery bez submit tlačidla) :)

Aj tak vďaka za pomoc.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa BX »

harrison314 napísal:Tu je jQUery "pseoudokod" musis ho dorobitúopravit aby to fungovalo spravne a k nemu PHP skrypt, ktory spravi update do db
Trochu to tu zneužijem harrison, prosím ťa, čo ak by som toto chcel urobiť kliknutím na obrázok? Ale niečo ako hodnotenie (s hviezdičkami, 1-5 hviezdičiek), pričom na jednej stránke je veľa príspevkov, a ku každému je 5 hviezdičiek.
Ako zistiť presne na ktorú hviezdičku sa kliklo a odoslať správny post dotaz? Dajme tomu, že každý prísp. má svoje id.

Kód: Vybrať všetko

$(".hviezdicka").click(function(e){
    $.post("kam poslat",
    {
       prisp_id: // čo sem?
       hodnota_hviezdy: // čo sem?
    });
})
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa harrison314 »

BX napísal: Trochu to tu zneužijem harrison, prosím ťa, čo ak by som toto chcel urobiť kliknutím na obrázok? Ale niečo ako hodnotenie (s hviezdičkami, 1-5 hviezdičiek), pričom na jednej stránke je veľa príspevkov, a ku každému je 5 hviezdičiek.
Ako zistiť presne na ktorú hviezdičku sa kliklo a odoslať správny post dotaz? Dajme tomu, že každý prísp. má svoje id.

Kód: Vybrať všetko

$(".hviezdicka").click(function(e){
    $.post("kam poslat",
    {
       prisp_id: // čo sem?
       hodnota_hviezdy: // čo sem?
    });
})
Daco taketo som kedysi riesil, najjednoduhsie to bolo asi takto, na hviezdicky pouzijes for, ja som tam risil, aj hover efekt pri prechode a podobne veci na okrasu.

Kód: Vybrať všetko

<div ...>
<img src=" obrazok produktu" ... />
<div class="hodnotenie">
 <img src="hviezdicka.png" onClick="hodnot(12,1);" />
<img src="hviezdicka.png" onClick="hodnot(12,2);" />
<img src="hviezdicka.png" onClick="hodnot(12,3);" />
<img src="hviezdicka.png" onClick="hodnot(12,4);" />
<img src="hviezdicka.png" onClick="hodnot(12,5);" />
</div>

Kód: Vybrať všetko

function hodnotenie(product_id,rank)
{
$.post("kam poslat",
    {
       prisp_id: product_id,
       hodnota_hviezdy: rank
    });
}
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa BX »

Fíha a toto bude fungovať, hej? Tak to je paráda :D Dík
sharky-no
King
King
Používateľov profilový obrázok
Príspevky: 1681
Registrovaný: 31 okt 2006, 19:53

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa sharky-no »

alebo vyuzit nejaky data atribut. viac sa mi to paci takto, ale fici to rovnako :)

Kód: Vybrať všetko

<div class="hodnotenie" data-id="12">
<img src="hviezdicka.png" data-value="1" />
<img src="hviezdicka.png" data-value="2" />
<img src="hviezdicka.png" data-value="3" />
<img src="hviezdicka.png" data-value="4" />
<img src="hviezdicka.png" data-value="5" />
</div>

<script>
$('.hodnotenie img').click(function(){
  id = $(this).parent().data('id');
  value = $(this).data('value');

  $.post(/* bla bla bla */);
})

</script>
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa harrison314 »

sharky-no napísal:alebo vyuzit nejaky data atribut. viac sa mi to paci takto, ale fici to rovnako :)

Kód: Vybrať všetko

<div class="hodnotenie" data-id="12">
<img src="hviezdicka.png" data-value="1" />
<img src="hviezdicka.png" data-value="2" />
<img src="hviezdicka.png" data-value="3" />
<img src="hviezdicka.png" data-value="4" />
<img src="hviezdicka.png" data-value="5" />
</div>

<script>
$('.hodnotenie img').click(function(){
  id = $(this).parent().data('id');
  value = $(this).data('value');

  $.post(/* bla bla bla */);
})

</script>
V ktorej verzii (x)HTML to funguje?
sharky-no
King
King
Používateľov profilový obrázok
Príspevky: 1681
Registrovaný: 31 okt 2006, 19:53

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa sharky-no »

no v tej najlepsej ;) html5

p.s.: pod ie8 sa nestaram ako sa spravaju moje weby (pokial to nie je specialna poziadavka).

Kód: Vybrať všetko

<!DOCTYPE html>
<html> 
<head>
...
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa Michaelo »

Zdravím,

nechcem zakladať novú tému, tak to napíšem tuto.

Všetko mám hotové, ale objavil sa mi nepekný bug pri vkladaní dát do tabuľky.
Vkladám do tabuľky 47 riadkov (momentálne) a väčšinu údajov vloží v poriadku, no v 12 riadkoch má jeden stĺpec stále rovnakú hodnotu (127).
V tom stĺpci je ID vytiahnutí z tabuľky1 (tabuľka2 má vlastné ID, ID z prvej je uložené v druhom stĺpci), ktorým identifikiujem danú možnosť (ide o hlasovaciu anketu, takže teraz stačí vybrať jednu bugnutú možnosť a zahlasujete za 12 možností :lol: ).

Tuto je časť kódu ktorý používam:

Kód: Vybrať všetko

		$delete = dbquery("TRUNCATE TABLE ".VOT_VOTES."");
		
		$update = dbquery("INSERT INTO ".VOT_VOTES." (vot_vote_id, vot_opt, vot_nation, vot_type, vot_tier, vot_opt_img) SELECT vot_id, vot_opt, vot_nation, vot_type, vot_tier, vot_opt_img FROM ".VOT_OPTIONS." WHERE vot_enabled='1'");
	
		$save = dbquery("INSERT INTO ".VOT_POLLS." (vot_title, vot_started, vot_ended) VALUES ('Voting poll', '".time()."', '0')");
Momentálne som pridal viac možnosti (dokopy ich je 208 zatiaľ), a prišiel som na to, že všetky možnosti od ID 127 majú stále rovnaké ID (127) v druhom stĺpci.
Skúsil som položke 127 zmeniť ID na iné a dokonca ju aj vymazať, ale nepomohlo.
Fakt netuším kde by mohol byť problém.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: DB Update jedného stĺpca vo viacerých riadkoch

Príspevok od používateľa audiotrack »

máš zlý dátový typ pre ten stlpec, nastav mu SMALLINT,MEDIUMINT alebo INT a nie TINYINT ktorý tam máš podľa všetkého teraz
Napísať odpoveď