MySQL to MSSQL problem

Pagina: 1
Acties:

  • P1mm0s
  • Registratie: Maart 2006
  • Laatst online: 17-09-2023
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.

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Het probleem zit hem niet in je TOP, maar in je COUNT. Die kun je alleen gebruiken als je voor alle andere velden een GROUP BY opgeeft, anders weet SQL niet welke gegevens je nu eigenlijk wilt hebben.

MySQL is daar notoir slordig mee.

Wat betekent mijn avatar?


  • P1mm0s
  • Registratie: Maart 2006
  • Laatst online: 17-09-2023
Hoe kan ik het beste de GROUP BY toevoegen, ik zelf ben niet zo heel erg bekend met die functie, de query is als volgt:

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 WHERE city='MyCity'
ORDER BY postalcode,housenr ASC) AS tbl1
ORDER BY postalcode,housenr DESC) AS tbl2
ORDER BY postalcode,housenr ASC

Omdat ik hier te maken heb met een white_subscriber.*, weet ik niet waar ik de GROUP BY moet plaatsen, mijn GROUP BY is als volgt die in m ijn oude query zat:

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 city

Alvast heel erg bedankt voor de support en steun.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.