update s pouzitim & operatoru

dadinok
Člen | 17
+
0
-

dobry den,
s nette zacinam, potreboval by som napisat dotaz v tvare:

update tabulka set stlpec = stlpec | premenna1 WHERE stlpec & premenna2

premenna1 a premenna2 sa ziskavju cez POST formular

dakujem

David Matějka
Moderator | 6445
+
0
-

ahoj, v sql delam dlouho, ale jeste jsem tam nevidel pouziti | a &. to maji byt bitove operace nebo neco se snazis dosahnout?

dadinok
Člen | 17
+
0
-

ano su to bitove operacie, cize mam nejake prava a chcem ich prehodit
cize chcem prehodit vsetkym uzivatelom s pravami 4096 prava na hodnotu 65536

potrebujem spustit dva dotazy:
pridat pozadovane prava a potom vymazat povodne cize

update tabulka set prava = prava | 65536 WHERE prava & 4096

a nasledne

update tabulka set prava = prava & ~4096 WHERE prava & 4096

toto mam v module v metode pre update, ale nezbehne, result je NULL:
$data id z kontrolera, nepouZIvam zatial komponentu form preto:
$data = $this->request->getPost();

if (mam $data) {
tak volam this->db->nastavprava($data);
}

public function nastavprava($data) {

$sql = ‚update tabulka set prava = prava | ' . $data['noveprava‘] . ' WHERE prava & ' . $data[‚stareprava‘];
$result = $this->database->query($sql);

}

Editoval dadinok (25. 9. 2018 10:55)

David Matějka
Moderator | 6445
+
+2
-

melo by jit pouzit klasicky query bez builderu, tedy neco jako

$db->query('UPDATE tabulka SET prava = prava | ? WHERE prava & ?', $promenna1, $promenna2);

u builderu by melo jit pouzit SqlLiteral

$db->table('tabulka')
->where('prava & ?', $promenna2)
->update(['prava' => new Nette\Database\SqlLiteral('prava | ?', [$promenna1])])
dadinok
Člen | 17
+
0
-

David Matějka napsal(a):

melo by jit pouzit klasicky query bez builderu, tedy neco jako

$db->query('UPDATE tabulka SET prava = prava | ? WHERE prava & ?', $promenna1, $promenna2);

u builderu by melo jit pouzit SqlLiteral

$db->table('tabulka')
->where('prava & ?', $promenna2)
->update(['prava' => new Nette\Database\SqlLiteral('prava | ?', [$promenna1])])

super hned vyskusam dam vediet

dadinok
Člen | 17
+
0
-

Dakujem funguje to.