Autor Zpráva
vasek125
Profil *
Ahoj. Mám databázi, kde mám několik sloupců a několik řádků s různými hodnotami. Chci docílit toho, aby se do všech u všech řádků, kde je sloupec nějaká hodnota, přidala k nějaké další hodnotě jiná. Asi takhle:

datum lidi
------------------------
12.2.2005 pepa
12.2.2005 pepa franta
13.2.2005 pepa

Potřebuju do `lidi` přidat `josef` tam, kde je `datum` 12.2.2005. Teď to řeším přes cyklus, který vybere původní hodnotu a vloží jí zpátky i s přidanou pomocí UPDATE. Nelze to řešit jednodušeji, alegantněji?
tiso
Profil
Skús to popísať tak aby to niekto aj pochopil...
Eddie
Profil
precital som si to trikrat a stale som to nepochopil... trosku viac rozpis tvoj problem...
vasek125
Profil *
Ke stávajícím hodnotám u datumu 12.2.2005 potřebuju přidat josef. Tak aby to vypadalo takhle:

datum lidi
------------------------
12.2.2005 pepa josef
12.2.2005 pepa franta josef
13.2.2005 pepa

Pokud nejdřív stávající hodnotu vyberu selectem, musím nastavit limit 1 a tím pádem skončím tak, že se josef přidá pouze k první hodnotě kterou u 12.2.2005 najde:

datum lidi
------------------------
12.2.2005 pepa josef
12.2.2005 pepa josef
13.2.2005 pepa

Proto to dělám přes cykly, který jedou řádek po řádku a vybírají původní hodnoty, potom je tam znova zapisují rovnou s hodnotou novou. Chtěl bych vědět, zda by nebylo elegantnější a rychlejší řešení? Něco jako:

UPDATE `tabulka` SET `lidi` = lidi+'josef' WHERE `datum` ='12.2.2005'

p.s.:Tohle samozřejmě nefunguje lidi+josef...
Hugo
Profil
UPDATE `tabulka` SET `lidi` = CONCAT(`lidi`,'josef') WHERE `datum` ='12.2.2005'
vasek125
Profil *
dík
vasek125
Profil *
No a co kdybych chtěl přidat hodnotu, ale pouze za podmínky, že se v tom lidi už nevyskytuje. Třeba kdyby tam už josef byl, aby se tam nepřidával zase. Jde to taky takhle nějak jednoduše vyřešit?
k
Profil *
if
nebo
replace
vasek125
Profil *
Supr, už jsem to vyřešil, díky..


WHERE ... AND NOT FIND_IN_SET('josef',REPLACE(lidi,' ',','))>0
vasek125
Profil *
.. a ještě něco důležitého, je něco místo CONCAT i na odebrání josef místo na přidání?
nightfish
Profil
vasek125
pohledej

možná by to šlo pomocí replace(lidi, 'josef' ,''), jinak zřejmě pomocí nějaké onanie přes substring a locate

a nebo změnit schéma tabulky tak, aby tyhle hrátky nebyly potřeba...
vasek125
Profil *
Schéma by měnit nešlo, teda šlo, mít 1000 tabulek a milión dalších s miliardami hodnot.... aby to bylo kam ukládat.
nightfish
Profil
vasek125
nevidím do tvého problému, nicméně 1000 tabulek mi příjde dost
k
Profil *
vasek125
Zajimal by mne presnejsi popis tveho problemu jelikoz 1001000 tabulek je fakt dost..
Urcite existuje efektivnejsi a elegantnejsi reseni, nez ktere momentalne pouzivas.
vasek125
Profil *
Neexistuje. Dělám program na blokování ip adres, část v php, část v bashi. Tabulka má několik sloupců a tenhle je se zablokovanými porty. Problém jsem popsal stručně a rychle abych tady nezatěžoval vymyslel jsem si ty lidi a pak aplikoval u mě.
vasek125
Profil *
nightfish: To s tím replace nejde. Řeším to teď takhle:

if ($_GET['where']=="ports") {
$navrat = "";
$co = "";
$port = $_GET['port'];

if ($_SESSION['mysettperm']=="superuser") {
$co="SELECT ports_deny, address FROM ip WHERE `room`='$cilbloku'";
} else { $co="SELECT ports_deny, address FROM ip WHERE `room`='$cilbloku' AND FIND_IN_SET('$aktualni_uzivatel_clk',REPLACE(owner,' ',','))>0"; }
$navrat=mysql_db_query($db , $co, $spojeni);
while (list($akt_porty,$adresa) = mysql_fetch_row($navrat)) {
$portiky = $_GET['port'];

$patterns = array(
"/ [$port]/smU"
);
$replacements = array(
""

);
$portiky = preg_replace($patterns,$replacements, $akt_porty);

if ($_SESSION['mysettperm']=="superuser") {
$cvokco="UPDATE `ip` SET `ports_deny` = '$portiky' WHERE `room` ='$cilbloku' AND `address` ='$adresa'";
} else { $cvokco="UPDATE `ip` SET `ports_deny` = '$portiky' WHERE `room` ='$cilbloku' AND FIND_IN_SET('$aktualni_uzivatel_clk',REPLACE(owner,' ',','))>0 AND `address` ='$adresa'"; }
mysql_db_query($db , $cvokco, $spojeni);
}
$cvokco = "";
}
Toto téma je uzamčeno. Odpověď nelze zaslat.