Nu we de laatste tijd zijn omgeschakeld van MySQL naar MSSQL ging alles fijn behalve:
- de LIMIT functie wordt niet gesupport door MSSQL, ik heb overal zo'n beetje gekeken en wat truukjes gevonden om dit voor elkaar te krijgen in MSSQL, de oplossing is door middel van een TOP query, ik heb hier een werkende query:
SELECT *
FROM (SELECT TOP 5 menu_naam, menu_link, menu_id
FROM (SELECT TOP 20 menu_naam, menu_link, menu_id
FROM menu
ORDER BY menu_id) AS tbl1
ORDER BY menu_id DESC) tbl2
ORDER BY menu_id
Het probleem is, hoe ga ik deze methode toepassen op een veel geavanceerdere code zoals hieronder:
SELECT TOP 100 white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM white_subscriber LEFT JOIN white_info ON white_info.id = white_subscriber.id WHERE postalcode LIKE '0000__' GROUP BY white_subscriber.id, white_subscriber.category, white_subscriber.title, white_subscriber.firstname, white_subscriber.infix, white_subscriber.lastname, white_subscriber.streetname, white_subscriber.housenumber, white_subscriber.postalcode, white_subscriber.city, white_subscriber.phone, white_info.id ORDER BY postalcode,housenr
Ik zelf heb de code als volgt gemaakt:
SELECT white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM (SELECT TOP 100 white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM (SELECT TOP 200 white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM white_subscriber LEFT JOIN white_info ON white_info.id = white_subscriber.id
ORDER BY postalcode,housenr ASC) AS tbl1
ORDER BY postalcode,housenr DESC) AS tbl2
ORDER BY postalcode,housenr ASC
Deze code is nodig om het zoeken in de telefoonboek database en geeft me de volgende query errors:
- The column prefix 'white_subscriber' does not match with a table name or alias name used in the query
- - The column prefix 'white_info' does not match with a table name or alias name used in the query
Op een Engels forum heb een volgende antwoord gekregen voor een oplossing voor de query:
SELECT * FROM
(SELECT TOP 100 * FROM
(SELECT TOP 200 white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM white_subscriber LEFT JOIN white_info ON white_info.id = white_subscriber.id
ORDER BY postalcode,housenr ASC) AS tbl1
ORDER BY postalcode,housenr DESC) AS tbl2
ORDER BY postalcode,housenr ASC
Deze code geeft me weer de volgende errors:
mssql_query() [function.mssql-query]: message: Column 'white_subscriber.id' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. (severity 16) in c:\Inetpub\wwwroot\fs2005.php on line 812
en zo door voor iedere kolom.
Als iemand een oplossing weet, wat de juiste volgorde is om de topfunctie te gebruikenh bij deze geavanceerde code, laat het me weten, alavast heel erg bedankt voor de support.
- de LIMIT functie wordt niet gesupport door MSSQL, ik heb overal zo'n beetje gekeken en wat truukjes gevonden om dit voor elkaar te krijgen in MSSQL, de oplossing is door middel van een TOP query, ik heb hier een werkende query:
SELECT *
FROM (SELECT TOP 5 menu_naam, menu_link, menu_id
FROM (SELECT TOP 20 menu_naam, menu_link, menu_id
FROM menu
ORDER BY menu_id) AS tbl1
ORDER BY menu_id DESC) tbl2
ORDER BY menu_id
Het probleem is, hoe ga ik deze methode toepassen op een veel geavanceerdere code zoals hieronder:
SELECT TOP 100 white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM white_subscriber LEFT JOIN white_info ON white_info.id = white_subscriber.id WHERE postalcode LIKE '0000__' GROUP BY white_subscriber.id, white_subscriber.category, white_subscriber.title, white_subscriber.firstname, white_subscriber.infix, white_subscriber.lastname, white_subscriber.streetname, white_subscriber.housenumber, white_subscriber.postalcode, white_subscriber.city, white_subscriber.phone, white_info.id ORDER BY postalcode,housenr
Ik zelf heb de code als volgt gemaakt:
SELECT white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM (SELECT TOP 100 white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM (SELECT TOP 200 white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM white_subscriber LEFT JOIN white_info ON white_info.id = white_subscriber.id
ORDER BY postalcode,housenr ASC) AS tbl1
ORDER BY postalcode,housenr DESC) AS tbl2
ORDER BY postalcode,housenr ASC
Deze code is nodig om het zoeken in de telefoonboek database en geeft me de volgende query errors:
- The column prefix 'white_subscriber' does not match with a table name or alias name used in the query
- - The column prefix 'white_info' does not match with a table name or alias name used in the query
Op een Engels forum heb een volgende antwoord gekregen voor een oplossing voor de query:
SELECT * FROM
(SELECT TOP 100 * FROM
(SELECT TOP 200 white_subscriber.*, (housenumber) AS housenr, count(white_info.id) AS infocnt FROM white_subscriber LEFT JOIN white_info ON white_info.id = white_subscriber.id
ORDER BY postalcode,housenr ASC) AS tbl1
ORDER BY postalcode,housenr DESC) AS tbl2
ORDER BY postalcode,housenr ASC
Deze code geeft me weer de volgende errors:
mssql_query() [function.mssql-query]: message: Column 'white_subscriber.id' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. (severity 16) in c:\Inetpub\wwwroot\fs2005.php on line 812
en zo door voor iedere kolom.
Als iemand een oplossing weet, wat de juiste volgorde is om de topfunctie te gebruikenh bij deze geavanceerde code, laat het me weten, alavast heel erg bedankt voor de support.