|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2016-10-15 23:13 UTC] kalle@php.net
-Status: Open
+Status: Wont fix
[2016-10-15 23:13 UTC] kalle@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 01:00:01 2025 UTC |
Description: ------------ I have a query here that gives the right results in SQL Management Studio but wrong results in PHP (using mssql libraries under FreeBSD using FreeTDS) The query is as follow: SELECT ROW_NUMBER() OVER (ORDER BY count DESC), s.* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY t.field1), t.blah, ...., (SELECT COUNT(field2) FROM x WHERE x.fieldx=t.fieldx) AS count FROM table t WHERE CONTAINS(t.field3,'"some stuff"') ) AS s In this query, in management studio the results are the desired results however in PHP, the field count is like incremented and doesn't give the right results.. I'm using the following in a CTE because I need double ordering. (that is ordering on field1 and then ordering on count) Using freetds-msdblib-0.64_2 and mssql extensions Wrapping this query in a stored procedures gives back the proper results. Reproduce code: --------------- <?php $query = "WITH CTE AS ( SELECT ROW_NUMBER() OVER (ORDER BY count DESC) rowNumber, s.* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY t.field1) rowNumber2, t.blah, (SELECT COUNT(field2) FROM x WHERE x.fieldx=t.fieldx) AS count FROM table t WHERE CONTAINS(t.field3,'"some stuff"') ) AS s ) SELECT TOP 30 * FROM [CTE] WHERE rowNumber>=1"; $ressource = mssql_query($query); while ($row = _fetch_array($ressource)) { echo "<pre>"; print_r($row); echo "</pre>"; } ?> Expected result: ---------------- management studio: count for many records go from 1 1 1 0 0 0 0 ... Actual result: -------------- count for many records go from 3 3 3 2 2 1 1 0