Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
basta74
Člen
Avatar
basta74:22.10.2014 16:46

Zdravím potřebuju k standardním položkám pro pobočku "telefon,adre­sa,oteviraciDo­ba" čas od času zobrazit informace o provozu pobočky ve svátek.
Mám SQL dotaz.
Tabulka "pobocky" a k nim nově tabulky "svatky" a potom spojovací tabulku "pobocka_svatky" kde je id pobočky id svatku a hodnota.
Čili pobocka Praha(1) má k svátku 1(28.10) otevřeno "9:00 - 21:00"
Data získávám tímto dotazem.

SELECT p.*, (SELECT GROUP_CONCAT(CONCAT(s.datum, '*', ps.text) SEPARATOR '~')
               FROM pobocka_svatek AS ps
               JOIN svatek AS s ON s.id = ps.svatekId
              WHERE ps.pobockaId = p.Id
                AND s.visible = 1 ORDER BY s.datum) AS svatecni_prodej
        FROM pobocky p
        WHERE p.zobrazovat = 1

K hodnotám k pobočce tedy dostanu položku
svatecni_prodej = " 2014-12-31 * 8:00-14:00~2014-01-01 * zavřeno "

to si pak pomocí explode() hodím do pole vypišu na řádku.
Jdou ty data načíst jinak, líp produktivněji?

Díky moc :)

Editováno 22.10.2014 16:49
 
Odpovědět
22.10.2014 16:46
Avatar
Odpovídá na basta74
Martin Konečný (pavelco1998):22.10.2014 17:39

Myslím, že nemůžeš jedním dotazem získat pomocí JOINu více než jeden řádek.

Nahoru Odpovědět
22.10.2014 17:39
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
basta74
Člen
Avatar
basta74:22.10.2014 18:13

No ten dotaz funguje a dobře i s několika řádky v tabulce svátky, ale bylo mi řečeno že je to "prasárna" a mám to přepsat. A potřeboval bych vědět jak...

 
Nahoru Odpovědět
22.10.2014 18:13
Avatar
Odpovídá na basta74
Michal Štěpánek:23.10.2014 12:46

V čem ten výpis pak zobrazuješ?

Nahoru Odpovědět
23.10.2014 12:46
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
basta74
Člen
Avatar
Odpovídá na Michal Štěpánek
basta74:23.10.2014 13:08

V html tabulce, kdy na konci řádku je malá tabulka

<table class="pracovnidoba"><tbody>
<tr><td>PO - SO</td><td>9:00 - 20:00</td></tr>
<tr><td>SO, NE</td><td>9:00 - 19:00</td></tr>
</tbody></table>

Pod kterou hodím

<table class="pracovnidoba red w100p"><tbody>
<tr><td> 5. 7.2014</td><td>9:00 - 18:00</td></tr>
<tr><td> 6. 7.2014</td><td>9:00 - 18:00</td></tr>
</tbody></table>

a naplním si ji něčím takovým

$ret = '<table class="pracovnidoba red">';
foreach ($arr as $key => $value) {
    if($key==$date->format("d.m.Y")){
        $key="Dnes";
    }
    $ret .= '<tr><td>'.$key.'</td><td>'.$value.'</td></tr>';
}
return $ret .= '</table>';

Říkal jsem si, že stačí z DB hodnota ve stringu kterou, si rozparsruju do pole a vykreslim jednoduchou tabulku.

 
Nahoru Odpovědět
23.10.2014 13:08
Avatar
Odpovídá na basta74
Michal Štěpánek:23.10.2014 13:12

Dle kódu soudím, že je to PHP. Asi bych to neřešil jedním složeným dotazem, vypsal bych si jedním dotazem to základní a pak při výpisu bych podle poboček vybíral dalším dotazem potřebné detaily...

Nahoru Odpovědět
23.10.2014 13:12
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
basta74
Člen
Avatar
Odpovídá na Michal Štěpánek
basta74:23.10.2014 15:10

Tak to byla dá se říct ta druhá možnost. Přesto jsem si říkal, že je jednodušší přidat jednu property a upravit 1 dotaz a nezasahoval do logiky.
Než vytrářet providery, readery, a 40 poboček nenačítat pomocí 1 SQL a ale 40 + 1 SQL dotazů.

 
Nahoru Odpovědět
23.10.2014 15:10
Avatar
shaman
Člen
Avatar
Odpovídá na basta74
shaman:13.2.2015 19:54

Sorry ze pozdnu odpoved.Aj ked je uz po sviatkoch, skus toto:

SELECT p.*, (SELECT GROUP_CONCAT(CONCAT(s.datum, '*', ps.text) SEPARATOR '~') AS svatecni_prodej
  FROM pobocky AS p
  JOIN pobocka_svatek AS ps
    ON ps.poboclaId = p.Id
  JOIN svatek AS s
    ON s.id = ps.svatekId
  WHERE p.zobrazovat = 1
    AND s.visible = 1
  ORDER BY s.datum;
Editováno 13.2.2015 19:55
Nahoru Odpovědět
13.2.2015 19:54
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.