Diskuze: Problém s GROUP BY po prechode na MySQL 5.7
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
On nikdo nereaguje, protoze nechape dotaz.
To php, to je tam krasna vec, ale lidi, co delaji s sql rozumi sql dotazum ne
php. zkus udelat v tom php echo toho dotazu a ten sem pak zkopiruj. Ta chybova
hlaska se tyka toho dotazu a v tomhle kodu nemas 80% dotazu.
Mam pocit, ze by mohl byt problem v tom, ze sloupce, ktere mas za GROUP BY je treba mit jeste v SELECT (ale to je asi blbost) nebo mozna WHERE. Jakoze ty sloupce, ktere jsou v group by musi byt jmenovane i ve where (nebo selectu). Mozna se da zmenit nejake nastaveni sql, ze to samo doplnuje, proto ti to jinde fungovalo, nevim.
'databaza.CubeCart_cats_idx.cat_id' - Takovyto string v
tom kodu, co jsi poslal, nikde nevidim.
".$glob['dbprefix']."CubeCart_cats_idx.productId - to jejspis
vyplodi...
'databaza.CubeCart_cats_idx.productId' - ale, to je preci
neco jineho
nemela by tam byt mezera u posledniho kousku retezce? tedy " Cube..." ?
To taky nechapu Ale to je u
mne normalni stav
Sql dotazy lze napsat takto:
SELECT sloupec FROM tabulka
SELECT tabulka.sloupec FROM tabulka
SELECT databaze.tabulka.sloupec FROM databaze.tabulka
Kdyz pise, ze neni agregovany, tak ten sloupec existuje, takze upravovat ten
text mezerou navic by nemelo asi nic zmenit. Ale jen hadam
databaza.CubeCart_cats_idx.cat_id
Si myslim, ze bude lepsi opravit sql dotazy nez resit zapinani nejakeho
modu.
Mohlo by to jit zapnout nejakym sql prikazem. To by se dalo najit asi googlem.
Ale az s tim bude delat cary mary priste, tak se znovu bude ptat. A treba ten
mod uz nepujde prepinat.
Chybí mu tam tečka
") GROUP BY ".$glob['dbprefix'].".CubeCart_cats_idx.productId";
Chtěl jsem napsat tečka a napsal mezera a už mi to nechtělo povolit opravu... (asi odpolední únava)
Předpokládám že má toto:
$glob['dbprefix'] = "databaze";
Takže spojením řetězců má jen:
"databazeCubeCart_cats_idx.productId"
Hele, mimochodem, doporucuji k linkum kopirovat i reseni. Kdyz ten link prestane fungovat, tak je ta odpoved neuzitecna. Pokud ne uplne vse, tak aspon trochu, naznacit.
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Z tohoto se uz da celem poznat, ze se jedna o query, ktere staci zadat pred tim, nez zavola ten jeho nebo hned po pripojeni k db. Osobne se mi ho nechtelo googlovat, sam to nepouzivam.
Také jsem na to narazil.
V phpMyAdmin vybrat localhost, proměnné, nalézt sql mode a zde odstranit tuto
část řetězce (viz obrázek)
Na hostingu to pravděpodobně půjde jen sql příkazy, ale nemám
odzkoušené.
SET global sql_mode=(SELECT REPLACE(@@sql_mode, ‘ONLY_FULL_GROUP_BY’,
”)); - toto by mělo u řetězce odstranit jen tuto část.
Odkaz: "":https://w3site.ca/…ysql-5-7-28/
Ještě doplnění předchozího. Na localhostu se Vám to povede ale po
restatu db se to musí provést znovu.
Na hostingu to nemusí být umožněno (změna proměnné a ani příkaz se
slovem global.)
Nakonec funguje výše uvedený příkaz SET sql_mode=(SELECT
REPLACE(@@sql_mode, ‘ONLY_FULL_GROUP_BY’, ”))
Nesmí tam být uvedeno global, naopak by tam místo global mohlo být
SESSION.
Tento příkaz dát do php např. po vytvoření conectivity na db. Např:
$db = new PDO('mysql:host=localhost;dbname=jmeno_db;charset=utf8',
'jmeno', 'heslo');
$db->exec("SET sql_mode=(SELECT
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
Zobrazeno 11 zpráv z 11.