Select where+and+or při použití ID
- Koupilsemto
- Člen | 38
Dobrý den, omlouvám se že zase píší ale mám problém sestavit tento
dotaz se kterým se trápím okolo 3 hodin. Nejspíše někde dělám špatně
čárku nebo závorku.
SELECT * FROM log
WHERE ID_users =‚9‘ AND akce
=‚Připravena k vyzvednutí‘ OR ID_users =‚9‘ AND akce
=‚Rezervováno‘
Podařilo se mi vytvořit… to je však spatně.
public function renderStavobjednavka($strana = 1) {
$this->template->strana = $strana;
$this->template->log = $this->database->table('log')
->where($this->user->getId())
->where('akce = ? OR akce = ?','Připravena k vyzvednutí', 'Rezervováno')
->page($strana, 20)
->order('akce ASC');
}
Nažím se vytvořit neco jako ->where($this->user->getId() AND ‚akce = ?,'Připravena k vyzvednutí‘ OR ‚ID_users = ?‘,‚9‘ AND ‚akce = ?,'Rezervováno‘) a podle dokumentace se mi to moc nedaří :(
Editoval Koupilsemto (7. 5. 2018 18:07)
- kiCkZ
- Člen | 153
Začal bych první chybou a to je pracovat s databází v presenteru, tato vrstva by měla být oddělena v modelu.
Následně bys mohl tento dotaz udělat takto:
$this->database->table('log')->where('user_id', $userId)->where('akce ? OR akce ?','Připravena k vyzvednutí', 'Rezervováno')->page($strana, 20)->order('akce');
- Koupilsemto
- Člen | 38
Díky za reakci a tu práci s databázi se pokusím předělat. Bohužel ten
dotaz je něco jiného než bych potřeboval:
SELECT * FROM log WHERE ID_users =‚9‘ AND akce =‚Připravena
k vyzvednutí‘ OR akce =‚Rezervováno‘; tohle skončí tak že
to najde ID kde je Pripravené… nebo vše kde je Rezervováno. Potřebuji
najdi ID kde je 9 a akce je Rezervovano NEBO kde je ID 9 a akce
Pripraveno.
Editoval Koupilsemto (7. 5. 2018 18:48)
- kiCkZ
- Člen | 153
Koupilsemto napsal(a):
Díky za reakci a tu práci s databázi se pokusím předělat. Bohužel ten dotaz je něco jiného než bych potřeboval:
SELECT * FROM log WHERE ID_users =‚9‘ AND akce =‚Připravena k vyzvednutí‘ OR akce =‚Rezervováno‘; tohle skončí tak že to najde ID kde je Pripravené… nebo vše kde je Rezervováno. Potřebuji najdi ID kde je 9 a akce je Rezervovano NEBO kde je ID 9 a akce Pripraveno.
Pokud jsem to pochopil správně, tak chceš dotaz, kde je jasně dané user_id = 9 ?
$this->database->table('log')->where('user_id', 9)->where('akce', ['Připravena k vyzvednutí', 'Rezervováno'])->page($strana, 20)->order('akce');
Editoval kiCkZ (7. 5. 2018 19:07)
- Koupilsemto
- Člen | 38
Jo jo chápeš dobře ale místo ID 9(bylo jen jako příklad) potřebují
zobrazovat pro aktuálně přihlášeného pomocí
($this->user->getId()) a to se mi nedaří. A pokud
fungují podmínky že chci Rezervované nebo připravené tak mi nejde
podmínka aby to byla aktuálně přihlášená ID
Editoval Koupilsemto (7. 5. 2018 19:19)
- kiCkZ
- Člen | 153
Koupilsemto napsal(a):
Jo jo chápeš dobře ale místo ID 9(bylo jen jako příklad) potřebují zobrazovat pro aktuálně přihlášeného pomocí
($this->user->getId()) a to se mi nedaří
Právě proto si vytvoř model, ve kterém napíšeš metodu na vytáhnutí dat z DB a jako parametr budeš předávat to ID aktuálně přihlášeného uživatele, proto jsem ti ten první dotaz psal s proměnnou $userId.
public function nazev_funkce($userId) // zde máš předávat ID aktuálně přihlášeného uživatele
{
return $this->database->table('log')->where('user_id', $userId)->where('akce', ['Připravena k vyzvednutí', 'Rezervováno'])->page($strana, 20)->order('akce');
}
Editoval kiCkZ (7. 5. 2018 19:23)
- Koupilsemto
- Člen | 38
Promin jsem amatér. Bohužel nevím jak předat ID aktuálně přihlášeného do $userId ale s $userId=‚neco‘ funguji podmínky na 100%.
- kiCkZ
- Člen | 153
Koupilsemto napsal(a):
Promin jsem amatér. Bohužel nevím jak předat ID aktuálně přihlášeného do $userId ale s $userId=‚neco‘ funguji podmínky na 100%.
V pořádku i já jsem dost začátečník, nicméně postupně se určitě dostaneš dál.
Mrkni se na tento příklad: https://forum.nette.org/…senterom-atd#…
A v tomto příkladu máš presenter a metodu, která předaná data zobrazí (render):
public function renderDefault() {
$this->template->data = $this->model->mojeMetoda($this->user->id); // zde předáš ID
}
A poté v modelu (MujModel), kde je metoda (mojeMetoda) nastavíš, aby funkce přijala nějaký parametr
public function mojeMetoda($userId) {
return $this->database->table('log')->where('user_id', $userId)->where('akce', ['Připravena k vyzvednutí', 'Rezervováno'])->page($strana, 20)->order('akce');
}
Pokud nemáš žádné zkušenosti s tím, jak nastavit parametr do metod, tak bych spíše začal základy a poté přešel na OOP a až následně na framework, aby si aspoň tušil, jakým způsobem se dá s PHP pracovat.
Editoval kiCkZ (7. 5. 2018 20:36)
- Koupilsemto
- Člen | 38
Tak to je bomba!!! ani nevíš jak jsi mi pomohl a konečně mi pár věcí došlo :D moc díky za trpělivost. Dám sem ukázku třeba někomu také pomůže + popis.
- Zalozit MujModel.php v app/model a vytvořit metodu
<?php
class MujModel {
public $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function mojeMetoda($userId) {
return $this->database->table('log')
->where('ID_users', $userId)
->where('akce', ['Připravena k vyzvednutí', 'Rezervováno'])
->order('akce');}}
- Přidat model do service v config.neon jinak skončí chybou model not found
services:
- MujModel
- Vytvoritořit v presenteru (v mém případě) KnihyinfoPresenter.php renderování a přidat public $model; pred metodu render jinak skonči chybou Cannot read an undeclared property
class KnihyinfoPresenter extends Nette\Application\UI\Presenter {
public $model;
public function renderStavobjednavka() {
$this->template->log = $this->model->mojeMetoda($this->user->id);
}
- a pak samozřejmě latte…
Je docela možné že to není 100% jak by mělo být proto to berte jako
inspiraci jelikož jsem amater. Ale funguje to!
A moc díky KiCkZ i CzechBoy za pomoc jsem o něco chytřejší.
Editoval Koupilsemto (8. 5. 2018 0:39)