Avatar
basta74
Člen
Avatar
basta74:

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):

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
Avatar
basta74
Člen
Avatar
basta74:

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:

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:

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:

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:

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:

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.