Diskuze: SQL dotaz na zobrazenie vsetkych clankov autorov, pricom pre kazdeho je nastaveny limit poctu clankov
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 8 zpráv z 8.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
šel bych na to asi nějak takto:
(
SELECT title, article
FROM articles
WHERE user = peter
LIMIT 5
)
UNION
(
SELECT title, article
FROM articles
WHERE user = alfons
LIMIT 8
)
UNION
(
SELECT title, article
FROM articles
WHERE user = bohumil
LIMIT 14
)
ORDER BY date DESC
A klidne to muzes udelat i bez union, jednotlivymi dotazy a v cyklu jen menit jmeno a pocet.
No len ako by vyzeral ten cyklus, myslim menit meno a pocet v cyklu
?
Tady máš nástin jedné z možností, jak by mohl vypadat ten cyklus v php.
/**
* funkce wacejicí výsledky z db jako pole
* @return array
*/
function getDbResults(): array {
// imlmentaci si předpokládám doplníš sám ..
}
$limits = [ // limity pro jenotlivé autory
'author_1' => 10,
'author_2' => 20,
'author_3' => 30,
'author_4' => 40
];
$results = [];
foreach ($limits as $author => $limit) {
$sql = 'SELECT * FROM articles WHERE author = ' . $author . ' LIMIT ' . $limit;
$results += getDbResults();
}
// dále zpracuji výsledky dle pořeby
// $sql = 'SELECT * FROM articles WHERE author = ' . $author . ' LIMIT ' . $limit;
$query = "SELECT * FROM articles WHERE id_author = %s LIMIT %s";
$query = sprintf($query,
escapeSql($author, 'int'),
escapeSql($limit, 'int')
// coz muze byt: (int) $value, v pripade stringu "'".preg_replace('~[']~', "\\'", $value) . "'"
// ale spravne bys mel pouzit funkce primo z sql driveru, prepare statement nebo na escapovani
);
Stacilo by pouzit google, ten je prikladu plny.
A tez by bylo dobre pouzivat spravne nazvy promennych. sql neni totez jako
query.
$sql = 'SELECT * FROM articles WHERE author = ' . $author . ' LIMIT ' . $limit;
$query = "SELECT * FROM articles WHERE id_author = %s LIMIT %s";
$query = sprintf($query,
escapeSql($author, 'int'),
escapeSql($limit, 'int')
// coz muze byt: (int) $value, v pripade stringu "'".preg_replace('~[']~', "\\'", $value) . "'"
// ale spravne bys mel pouzit funkce primo z sql driveru, prepare statement nebo na escapovani
);
No len pouzivam PDO z online kurzu MVC cms
, autor bude samozrejme id,
'int'
S tymto zapisom sa este nestretol, mam k tomu zopar otazok:
/**
* funkce wacejicí výsledky z db jako pole
* @return array
*/
function getDbResults(): array {
// tu bude vystup pole v zapise? napr.
return $results['clanok_id'];
//alebo ?
echo $results['clanok_id'].'-'.$results['autor_meno'];
}
$limits = [ // limity pro jenotlivé autory
'author_1' => 10,
'author_2' => 20,
'author_3' => 30,
'author_4' => 40
];
$results = []; // premenna je pole obdobny zapis by mal byt zrejme: $results=array();
foreach ($limits as $author => $limit) {
$sql = 'SELECT * FROM articles WHERE author = ' . $author . ' LIMIT ' . $limit;
$results += getDbResults();// vygeneruje zaradom vsetky sql dotazy
}
// dále zpracuji výsledky dle pořeby
$results = []; // premenna je pole obdobny zapis by mal byt zrejme: $results=array();
foreach ($limits as $author => $limit) {
$sql = 'SELECT * FROM articles WHERE author = ' . $author . ' LIMIT ' . $limit;
$results += getDbResults();// vygeneruje zaradom vsetky sql dotazy
}
//---
$results = array();
foreach ($limits as $author => $limit) {
$query = 'SELECT * FROM articles WHERE author = ' . $author . ' LIMIT ' . $limit;
$results += getDbResults($query);
}
getDbResults($query) - to bylo podle mne mysleno symbolicky, ani se nenamahal to dopsat. A ty to stejne nahradis vlastnim zpusobem zapisu.
Ja treba ted pouzivam vlastni class WS, ktera vraci array.
$results += $ws->getArticlesByAuthorId( array('id'=>$author, 'limit'=>$limit) );
// function ($opt=array(), $format=''), format je array, json, xml, csv, txt
Cili, na sql dotazy mam spesl class, a mnohem lepe se pak edituji jako celek v jednom. Navic mi ta class dokaze generovat ruzne formaty, takze vystup muzu zrovna pouzit pro javascript nebo excel (csv) nebo jinam. A soucasne class zkontroluje i opravneni uzivatele. Pak obsahuje prikazy pro nacteni uzivatele z ldap. Cili, nejenom sql. A tez treba ciselniky z textovych souboru a jine.
Zobrazeno 8 zpráv z 8.
