Už 2-3 hodinu si lámu hlavu s pro mě nepochopitelným problémem.
Používám knihovnu PDO s driverem dblib pro spojení s Ms Sql databází. Snažím se pomocí SQL dotazu vytáhnout data z db.
SQL dotaz má tuto strukturu:
Když zadám SQL dotaz do SQL server managment, tak se mi vrátí správný výpis dat. Pokud dotaz pošlu přes PHP PDO, tak hodnota 'data' je VŽDY null. Data ze sloupců a.id, a.test jsou v pořádku.Kód:SELECT a.id, a.test, (SELECT SUM(b.pocet) FROM tabulkab b WHERE b.id=a.id) as 'data' FROM tabulkaa a
Dotazy jsou úplně stejné, databáze taky, vše jsem ověřoval ale prostě pro sloupec data vrací PDO vždy NULL. Je možné, že PDO nedokáže pracovat s dotazem, který obsahuje "subdotaz" takového typu a jednoduše vyhodí NULL?
Budu moct vděčný za pomoct, protože jsem vyčerpal všechny nápady. Na googlu se mi nic podobného nepodařilo dohledat.
[PHP] PDO dblib vrací jiné výsledky než SQL server managment?
Co se právě děje na Webtrhu?
- Eliaš - IT Solutions poptává: Tester - ecommerce platformy, hotových e-shopov
- Marek Auterský poptává: Wordpress pomoc - zabezpečení webu
- Jan Řehoř nabízí: Vývoj her, 3D interaktivního obsahu na webové stránce, webových aplikací a informačních systémů
Nevidim moc duvod, proc by to SQL nemelo fungovat (pokud pro kazde a.id existuje alespon jeden b.id, ktery ma zaroven dekadickou hodnotu v b.pocet).
Co uvazuju obecne, tak kdyz subselect vraci vice vysledku nez jeden, pak je mozne, ze v data budou NULL. To se da otestovat LIMITem v subselectu.
Pokud toto vrati neNULLovou hodnotu v data, pak puvodni subselect bez limitu vraci vice vysledku, ktere driver konvertuje na NULL.
Pripadne bych zkusil do subselectu pridat podminku b.pocet > 0 nebo b.pocet IS NOT NULL pro vyloceni neplatnych hodnot.Kód:SELECT a.id, a.test, (SELECT SUM(b.pocet) FROM tabulkab b WHERE b.id=a.id LIMIT 1) as 'data' FROM tabulkaa a
Hodne zdaru, obcas je to magie :)
Subdotaz vrací pouze jednu hodnotu, takže v tom problém nebude.
Já prostě nechápu, jak můžu zadat stejný SQL dotaz se stejnými hodnotami do SQL MS a vyjede mi jiný výsledek pro sloupec data než když data vypíšu přes PDO.
PS: Koukam... dobra volba :) na stackoverflow se s tim snad nekdo setkal a poradi vic:Subdotaz vrací pouze jednu hodnotu, takže v tom problém nebude.
Já prostě nechápu, jak můžu zadat stejný SQL dotaz se stejnými hodnotami do SQL MS a vyjede mi jiný výsledek pro sloupec data než když data vypíšu přes PDO.
PHP PDO dblib return another result than SQL server managment? is it possible?…
Jedine co ma napada je to ze MS je znamy svojimi ne-sandardnostami v naprosto kazdom standarde ktory implementoje, takze je mozne ze priamy dopyt ti spracuje v pohode ale cez pdo vrstvu sa strati nejaka informacia kvoli nestandardnej strukture? Eventuelne problem vo verziach a kompatibilite?
Bohužel se zdá, že se PDO opravdu vypisuje data špatně při "subdotazu".
Vyzkoušel jsem SQL server managment, HeidiSql a nakonec i PHP sqlsrv a všechny zobrazují pro dotaz stejné (správné) data. Pouze PDO dblib zobrazuje ve sloupci data hodnotu NULL (se stejným dotazem).
id v tabulkaa bude mít v tabulkab asi jiné jméno než id?...Kód:SELECT a.id, a.test, (SELECT SUM(b.pocet) FROM tabulkab b WHERE b.tabulkaa_id=a.id LIMIT 1) as 'data' FROM tabulkaa a
a preco vobec pouzivas subselect ?
Kód:SELECT a.id, a.test, SUM(b.pocet) as 'data' FROM tabulka a inner join tabulkab b on a.id=b.id group by a.id, a.test
Tento SQL dotaz jsem uvedl pouze jako ukázku, abych mohl problém popsat. Originální dotaz má join do cca 7 tabulek, takže by bez znalosti databáze a jejich tabulek nedával smysl (proto jsem zde ani nesdílel data z databáze).
Podle mne by to však mělo vypadat takhle:Kód:SELECT a.id, a.test, (SELECT SUM(b.pocet) FROM tabulkab b WHERE b.id=a.id) AS data FROM tabulkaa a
Kód:SELECT a.id, a.test, SUM(b.pocet) AS data FROM tabulkaa a LEFT JOIN tabulkab b ON a.id=b.id;