[PHP] Migreren van query op query uit access naar php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Hallo,

Ik ben bezig met het migreren van een complexe access applicatie die als front-end dient voor een MSSQL server naar een PHP applicatie die ook met MSSQL verbinding maakt.

Nu heb ik al een hele lijst met query's werkend uiteraard overgezet van access naar PHP. Deze werken allemaal goed.

Nu loop ik alleen tegen het probleem aan dat er ook query's zijn die andere query's er in verwerkt hebben, en dat soms tot heel veel "graden" diep.

Aangezien er her en der ook weer voorwaarden op los worden gelaten zit dit allemaal erg complex in elkaar en is het in sommige gevallen erg moeilijk om hier nog iets uit te halen.

Nu zijn er wel vele wegen die naar Rome leiden, en heb uiteraard ook al ge-googled.

Wat ik nu eigelijk moet gaan krijgen zijn van deze query's de sql variant, en dit gaat niet door even simpel naar SQL weergave te gaan (wat ik overigens wel bij de simpele query's heb kunnen doen die niet ook nog eens andere query's nodig hebben heb kunnen doen).

Wat ik dus nodig heb is een simpele en zo vlot mogelijke manier om dit als een SQL query te kunnen gebruiken. Ik kan niet alles 1 voor 1 uit gaan zoeken want dit is een applicatie met honderden query's.

Wat mijn vraag nu dus is hoe ik dit handig kan doen (eventueel met een programma, maar geen die php maakt maar eentje die mij harde sql query's geeft!)

Ik weet het niet zeker, maar mogelijk zou het ook zo kunnen zijn dat ik dan die query tussen haakjes daar zet zodat die er "tussendoor" wordt uitgevoerd.

Fragment van een klein stukje van de query is:
SQL:
1
SELECT [Hulp: contacts met organisatieID met RM].person_id...

"Hulp: contacts met organisatieID met RM" is hierbij dus een andere query, en geen tabel.

Hopelijk kan dit zo eenvoudig mogelijk, want het gaat om enkele honderden van dit soort query's!

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 16:18
Dit kun je met subquerys, views, functions of stored procudures oplossen.
Ligt er maar net aan wat je voorkeur heeft en wat de sub query voor resultaat zou moeten geven.

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Frijns.Net schreef op vrijdag 09 juli 2010 @ 15:55:
Dit kun je met subquerys, views, functions of stored procudures oplossen.
Ligt er maar net aan wat je voorkeur heeft en wat de sub query voor resultaat zou moeten geven.
Klopt, dit kan inderdaad wel met views en stored procedures etc. maar dat is allemaal aan de database kant, ik wil dit soort dingen zo veel mogelijk aan de php kant houden.

Maar wat die subquery's betreft. Zover ik weet is dat iets tussen haakjes als het ware zoals in mijn voorbeeld tussen de [ ] tekens.

Klopt dit? En kan er eens een voorbeeld worden gegeven hiervan, ik denk dat ik het dan al veel beter zal begrijpen.

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 16:18
Als je een goede performance wil houden, doe je juist zoveel mogelijk aan de database kant.
Maar dat is natuurlijk je eigen keuzen.

Een sub query vervangt gewoon de tabel naam in je hoofd query:

select veld1, veld2, veld3
from tabel1,
(select veld3 from eentabel where tabel1.id = tabel2.id) tabel2

Dit is even een eenvoudige weergave:

Meer is hier te vinden:
http://dev.mysql.com/tech...icles/4.1/subqueries.html

Want je kunt ook een query doen op de plek waar een veld staat.
Of een subset maken met een subquery waaraan je de hoofdquery laat voldoen.

[ Voor 14% gewijzigd door rvrbtcpt op 09-07-2010 16:12 ]


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Ok, bedankt voor de info tot dusver, aangezien het bijna week-end is zal ik dit maandag weer verderbekijken van die subquery's.

Maar wat is de meest handige manier om dit ook snel te doen dat dat ik dit per query ga uitzoeken, ik spreek hier namelijk echt over enkele honderden query's, die bijna allemaal subquery's nodig hebben.

Eventueel een stukje software ter migratie, die moet dan niet naar php gaan, maar gewoon een simpele query uitspuwen, want ik heb het hele systeem draaiend en hoef er alleen maar query's in te plaatsen, en eventueel de dynamische velden in te stellen. De rest heb ik allemaal al succesvol gebouwd.

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Als je die queries in Access hebt, zijn het dan niet al views of stored procedures in de mssql database die je gewoon vanuit PHP kunt aanroepen?

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
_js_ schreef op vrijdag 09 juli 2010 @ 21:39:
Als je die queries in Access hebt, zijn het dan niet al views of stored procedures in de mssql database die je gewoon vanuit PHP kunt aanroepen?
Nee, er is niks van views of stored procedures op de server aanwezig, dit heb ik voor de zekerheid nog een keer nagekeken.

In de huidige situatie zijn er enkele hulpquery's (zo worden ze bij ons tenminste genoemd). Andere query's vragen soms gegevens op uit meerdere hulpquery's.

Maar kan eens iemand een voorbeeld geven hoe dit gewoon snel kan worden ge-migreerd, want dit zijn allemaal best gecompliceerde query's die allemaal stuk voor stuk veel werk kosten.

Daarnaast zijn dit ook nog enkele honderden query's en ben ik de enige die aan dit project werkt.

Ik ben dus puur op zoek naar een methode om dit zo snel en efficient mogelijk allemaal te migreren. De huidige oplossing van Access is niet optimaal, en groeit zelfs een beetje boven access uit (vandaar die hulpquery's). Dus nu is het extra gecompliceerd en veel werk om het er uit te halen.

Maar ik ga er vanuit dat dit goed en snel kan worden gedaan, alleen weet ik niet hoe. Dit mag ook rustig een programma zijn die mij de query's er vanuit kan spuwen, meer dan de werkende query's heb ik niet nodig, omdat ik er een programma al voor gemaakt hebt waar ik deze dan maar in hoef te zetten, en eventueel nog wat moet doen om variabele velden aan te maken voor de filtercriteria.

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
No offense, maar aan je vorige topics te zien (\[PHP+MSSQL] Migratie Access naar php + Query vraag en [php] vreemde tekens in url ) , en dit incluis, heb je eigenlijk totaal geen idee waar je mee bezig bent.

Databases migreren en applicaties bouwen komt heel wat meer bijkijken dan wat googlen en hopen dat het werkt. Als ik jou was zou ik je even bijscholen (zoek een aantal goeie database en php guides, google is your friend), want zoals je nu bezig bent gaat ooit wel eens een klant/baas/collega dat je gewoon aan het klungelen bent en ze het beter zelf kunnen doen.

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Ik probeer hier metname ook van te leren, dit weet mijn leidinggevende ook. Ik ben wel van plan om nog specifiek ergens in verder te gaan, maar goed... dat nu even terzijde...

Maar wat ik me afvraag, is het gewoon mogelijk om iets als onderstaand te doen?
Ik zeg er wel bij dat onderstaande voorbeeld niet werkt, maar is dit wel werkend te krijgen zonder views of stored procedures?
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
require('db_connect.php');
$query1 = "SELECT * FROM medewerkers";
$query2 = "SELECT * FROM [".$query1."] WHERE `afdeling_id`  = `8`";
$query3 = "SELECT * FROM [".$query2."] WHERE `sex` = `male`";

$query_overzicht = mssql_query($query3) or die ("Fout!");
$query_result = mssql_fetch_assoc($query_overzicht);

// En hier de data weergeven...
?>


Dit is eigelijk een beetje waar ik naar op zoek ben, maar ik denk dat dit wat duidelijker is uitgelegd.
p.s. als er foutjes in het script zitten, deze heb ik even snel on-the-fly gemaakt...

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • TJVB
  • Registratie: Januari 2008
  • Laatst online: 16-09 16:02
Waarom zou je dat in 3 query's doen als het in 1 kan?
SQL:
1
2
3
4
5
SELECT *
FROM medewerkers
WHERE
  afdeling_id = 8 AND
  sex = 'male'

Weet je trouwens zeker dat je alles nodig hebt? Meestal is SELECT * meer informatie dan je nodig hebt.

Subquery's moeten verder (zoals hierboven al gemeld) met ( ) en niet met [ ]
Dus SELECT a,b,c FROM (Select d,e,f FROM tabela)

[ Voor 20% gewijzigd door TJVB op 12-07-2010 10:46 ]


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
TJVB schreef op maandag 12 juli 2010 @ 10:44:
Waarom zou je dat in 3 query's doen als het in 1 kan?
SQL:
1
2
3
4
5
SELECT *
FROM medewerkers
WHERE
  afdeling_id = 8 AND
  sex = 'male'

Weet je trouwens zeker dat je alles nodig hebt? Meestal is SELECT * meer informatie dan je nodig hebt.

Subquery's moeten verder (zoals hierboven al gemeld) met ( ) en niet met [ ]
Dus SELECT a,b,c FROM (Select d,e,f FROM tabela)
Klopt, normaal kan dit inderdaad in 1 query worden uitgevoerd. Maar dit is een simpel voorbeeld voor wat het idee is van wat ik nodig heb. Dus ook al kan deze in 1 query, het gaat puur om hoe deze query moet worden opgebouwd. Dit zijn namelijk niet de query's die ik ook daadwerkelijk gebruik.

En het is overigens inderdaad "SELECT *" omdat ik in dit voorbeeld alle velden nodig heb, dit is omdat simpelweg de tabellen "op maat" zijn gemaakt door de oorspronkelijke makers van de andere applicatie waar deze DB bij hoort.

Dus uiteindelijk gaat het toch er om om een voorbeeld als in mijn vorige post werkend te krijgen, ook al ga ik dat uiteraard niet met die query's doen wat inderdaad ook niet efficient zou zijn als ik dat wel zou doen.

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • TJVB
  • Registratie: Januari 2008
  • Laatst online: 16-09 16:02
Dan moet je nog steeds de [ en ] vervangen door ( en )

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
TJVB schreef op maandag 12 juli 2010 @ 10:56:
Dan moet je nog steeds de [ en ] vervangen door ( en )
Dat snap ik, dan wordt het onderstaand:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php 
require('db_connect.php'); 
$query1 = "SELECT * FROM medewerkers"; 
$query2 = "SELECT * FROM (".$query1.") WHERE `afdeling_id`  = `8`"; 
$query3 = "SELECT * FROM (".$query2.") WHERE `sex` = `male`"; 

$query_overzicht = mssql_query($query3) or die ("Fout!"); 
$query_result = mssql_fetch_assoc($query_overzicht); 

// En hier de data weergeven... 
?>


Maar dit zal zover ik weet niet gaan werken, of hoe moet ik dit werkend krijgen?

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • TJVB
  • Registratie: Januari 2008
  • Laatst online: 16-09 16:02
karstenmeijers schreef op maandag 12 juli 2010 @ 11:00:
[...]
Maar dit zal zover ik weet niet gaan werken, of hoe moet ik dit werkend krijgen?
Heb je het getest? Hoe heb je het getest? Wat was het resultaat? Wat voor foutmelding kwam er?

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Ik heb het nu even niet met PHP getest, maar voor de simpelheid even de query direct op de MSSQL server uitgevoerd.

De output van het PHP script zou zijn:
SQL:
1
SELECT * FROM (SELECT * FROM (SELECT * FROM medewerkers) WHERE `afdeling_id`  = `8`) WHERE `sex` = `male`


Aangezien dit een voorbeeld was en die tabellen in mijn database niet bestaan heb ik hier een soortgelijke query voor gemaakt met tabellen die wel bestaan (geen echte query, maar effe snel eentje met ongeveer een zelfde stijl). In praktijk zijn deze query's allemaal vele malen complexer.

Dit is de query die ik heb uitgevoerd:
SQL:
1
SELECT * FROM (SELECT * FROM (SELECT * FROM project) WHERE `active` = `0`) WHERE `organization_owner_id` = `3`


En dit was de foutmelding van MSSQL:
code:
1
2
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'WHERE'.

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • hellfighter87
  • Registratie: Mei 2008
  • Laatst online: 14:22
ik vraag me af waarom je eigenlijk je queries in php zelf wil?
Als je het toch wilt leren dan gelijk maar goed.
stored procedures zijn sneller en zijn ook veiliger.
Maar het grootste voordeel is dat het veel makkelijker te onderhouden valt.

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
hellfighter87 schreef op maandag 12 juli 2010 @ 11:29:
ik vraag me af waarom je eigenlijk je queries in php zelf wil?
Als je het toch wilt leren dan gelijk maar goed.
stored procedures zijn sneller en zijn ook veiliger.
Maar het grootste voordeel is dat het veel makkelijker te onderhouden valt.
De reden dat we met query's in PHP werken is dat straks een collega ook dit moet kunnen aanpassen, vandaar... Nadat ik dit systeem live heb ga ik dan namelijk ook door met een back-end, uiteindelijk kan iemand met SQL kennis dan via een back-end de query's aanpassen, zonder dat die hard bij de server kan. Die beheerdersinterface wordt dan namelijk een centrale plek waar meerdere dingen beheerd zullen worden, nu zijn daar teveel plaatsen voor, maar dat even terzeide...

Uiteindelijk is er toch mede hierdoor bewust gekozen om de query's aan de PHP kant te houden, maar vraag is nog altijd hoe ik zoals in mijn vorige post een query op een query kan uitvoeren.

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Nu online

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Je moet de subquery even een alias meegeven :)

Zie ook: http://bytes.com/topic/sq...rs/142990-select-subquery wat ik makkelijk vond door even te googlen op "mssql select from subquery"

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • Motrax
  • Registratie: Februari 2004
  • Niet online

Motrax

Profileert

Zet sowieso queries niet op één lijn... leesbaarheid is belangrijk.

Verder snap ik niet eens wat je met de query wil... je joint een aantal keer op elkaar, maar je geeft geen join clausule mee?

Bovendien kan je dit ook zo oplossen:
SQL:
1
2
3
4
SELECT *
FROM MEDEWERKERS
WHERE AFDELING_ID = '8'
WHERE SEX = 'male';


Verder vraag ik me af waarom je het AFDELING_ID als string opgeeft, tenzij er ID's aanwezig zijn als karakter.
Nog een ander punt is de hoofdlettergevoeligheid van MSSQL, weet niet of die er is, maar 'male' kan misschien anders zijn dan 'Male'.
TJVB schreef op maandag 12 juli 2010 @ 10:44:
Waarom zou je dat in 3 query's doen als het in 1 kan?
SQL:
1
2
3
4
5
SELECT *
FROM medewerkers
WHERE
  afdeling_id = 8 AND
  sex = 'male'

Weet je trouwens zeker dat je alles nodig hebt? Meestal is SELECT * meer informatie dan je nodig hebt.

Subquery's moeten verder (zoals hierboven al gemeld) met ( ) en niet met [ ]
Dus SELECT a,b,c FROM (Select d,e,f FROM tabela)
Bleh... ik lees nu pas je reactie goed... met TJVB dus.
karstenmeijers schreef op maandag 12 juli 2010 @ 11:32:
Uiteindelijk is er toch mede hierdoor bewust gekozen om de query's aan de PHP kant te houden, maar vraag is nog altijd hoe ik zoals in mijn vorige post een query op een query kan uitvoeren.
Door goed te lezen wat hier is aangedragen en door tutorials te volgen... en te begrijpen wat je nu precies probeert op te halen. TVJB heeft al veel eerder aangegeven wat een oplossing zou kunnen zijn en daar heb je geen subqueries voor nodig. Vervolgens wordt er aangegeven hoe je een subquery kan opbouwen en je post een stukje SQL wat gewoon nooit zal werken omdat het joinen op de alias ontbreekt.

Maareh, succes er mee, alle begin is lastig ;)

☻/
/▌
/ \ Analyseert | Modelleert | Valideert | Solliciteert | Generaliseert | Procrastineert | Epibreert |


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Bedankt zover voor de info, maar een join met 2 tabellen/query's lukt me nog wel, maar kan eens iemand dit doen voor mijn qeury uit het voorbeeld?

Want ik moet straks met query's gaan werken die gemmideld 6 to 8 tabellen nodig zullen hebben, en ook nog aan elkaar gelinkt zijn.

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 16:18
karstenmeijers schreef op zaterdag 10 juli 2010 @ 11:29:
[...]

Maar kan eens iemand een voorbeeld geven hoe dit gewoon snel kan worden ge-migreerd, want dit zijn allemaal best gecompliceerde query's die allemaal stuk voor stuk veel werk kosten.

Daarnaast zijn dit ook nog enkele honderden query's en ben ik de enige die aan dit project werkt.

Ik ben dus puur op zoek naar een methode om dit zo snel en efficient mogelijk allemaal te migreren. De huidige oplossing van Access is niet optimaal, en groeit zelfs een beetje boven access uit (vandaar die hulpquery's). Dus nu is het extra gecompliceerd en veel werk om het er uit te halen.

Maar ik ga er vanuit dat dit goed en snel kan worden gedaan, alleen weet ik niet hoe. Dit mag ook rustig een programma zijn die mij de query's er vanuit kan spuwen, meer dan de werkende query's heb ik niet nodig, omdat ik er een programma al voor gemaakt hebt waar ik deze dan maar in hoef te zetten, en eventueel nog wat moet doen om variabele velden aan te maken voor de filtercriteria.
Iemand inhuren met voldoende kennis, dan heb je het snel gedaan.
Als je het als leertraject gebruikt dan duurt het langer.
En met efficiënt, bedoel je, ook nog herbruikbaar voor een andere database, of gewoon wat betreft tijd?
Als het snel moet, dan maak je dus views die je voor meerdere queries kan gebruiken.
Idem voor stored procedures.

Drie verschillende select statements gebruiken die ook met een statement uitgevoerd kunnen worden zijn niet echt efficiënt, 3 hits of 1 hit op de database is nogal een verschil als het om veel data gaat.

Kortom:
- Zoek de simpelste queries uit waar een sub query in zit (of hulpquery)
- Zet die om, en ga rustig verder met de lastigere
- Als je de boel inventariseert voor je begint, kom je misschien queries tegen die veel op elkaar lijken en die je kunt samenvoegen.

Zoiets kost gewoon tijd. Er is geen wizard of script dat jullie MS Access queries even omzet naar MySQL queries.

Acties:
  • 0 Henk 'm!

  • Motrax
  • Registratie: Februari 2004
  • Niet online

Motrax

Profileert

karstenmeijers schreef op maandag 12 juli 2010 @ 13:02:
Bedankt zover voor de info, maar een join met 2 tabellen/query's lukt me nog wel, maar kan eens iemand dit doen voor mijn qeury uit het voorbeeld?

Want ik moet straks met query's gaan werken die gemmideld 6 to 8 tabellen nodig zullen hebben, en ook nog aan elkaar gelinkt zijn.
Nee, er is functioneel gezien geen reden om dit met een subselect uit te voeren.

Maar vooruit:
SQL:
1
2
3
4
5
6
7
8
9
10
11
SELECT * 
FROM MEDEWERKERS 
WHERE ID IN (
    SELECT ID
    FROM MEDEWERKERS
    WHERE AFDELING_ID = '8')
    AND ID IN (
        SELECT ID
        FROM MEDEWERKERS
        WHERE SEX = 'male')
    );

Aanname bij de query is dat het veld 'ID' het uniek identificerend veld van je tabel is.
Aanname is ook dat MSSQL dit aan kan zonder gebruik van aliassen, omdat dit om subqueries gaat.

Over efficiëntie moet je het niet hebben...

☻/
/▌
/ \ Analyseert | Modelleert | Valideert | Solliciteert | Generaliseert | Procrastineert | Epibreert |


Acties:
  • 0 Henk 'm!

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 16:18
Motrax schreef op maandag 12 juli 2010 @ 13:41:
[...]
Nee, er is functioneel gezien geen reden om dit met een subselect uit te voeren.

<knip>

Over efficiëntie moet je het niet hebben...
En zo blijf je met een gedrocht zitten waar over enkele maanden / jaren zich iemand van afvraagt: Waarom!!
Ofwel, als je het dan toch opnieuw moet maken, doe het dan op de juiste manier, en documenteer het.
Je leert dan hoe je het goed moet doen, en hoe je fatsoenlijk documentatie schrijft.
Schaf desnoods twee dummy boeken aan, eentje over SQL queries en een over het maken van technische documentatie. Dat kost je geen rib uit het lijf en daar heb je alleen maar voordeel van.

Als je dit namelijk op je CV zet en zoiets bij een andere werkgever laat zien, hoef je niet voor een tweede gesprek terug te komen.

[ Voor 12% gewijzigd door rvrbtcpt op 12-07-2010 17:06 ]


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Hallo,

Ik ben met de eerder via dit topic verkregen informatie nog eens aan de slag gegaan, en heb al redelijk wat query's om kunnen zetten zodat deze nu in PHP perfect werken. Ook heb ik er query's tussenzitten waar ik even niet uitkom.

Daarom vraag ik even bij deze wat ik met b.v. de onderstaande SQL query moet doen zodat ik deze werkend krijg (er wordt wel nog verwezen naar een lokale andere query via "Hulp:....". Hier moet ik ook nog naar kijken hoe ik dat ga oplossen met b.v. vieuws of iets dergelijks. Hebben jullie hier een advies voor?

Dit is de query, mijn vraag is dus hoe ik dit in PHP werkend krijg.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
SELECT [Hulp: contacts met organisatieID met RM].person_id,
       Iif([name_prefix] <> "", [name_prefix] & " " & [name] & " " &
                                [name_suffix],
       [name] & " " & [name_suffix]) AS organisatie,
       [Hulp: contacts met organisatieID met RM].initials,
       [Hulp: contacts met organisatieID met RM].lastname,
       [Hulp: contacts met organisatieID met RM].middle_name,
       [Hulp: contacts met organisatieID met RM].firstname,
       [Hulp: contacts met organisatieID met RM].sex,
       dbo_address.street,
       dbo_address.postal_code,
       dbo_address.city
FROM   (dbo_person_address_link
        INNER JOIN dbo_address
          ON dbo_person_address_link.address_id = dbo_address.address_id)
       INNER JOIN (dbo_organization
                   INNER JOIN [Hulp: contacts met organisatieID met RM]
                     ON dbo_organization.organization_id =
                   [Hulp: contacts met organisatieID met RM].organization_id)
         ON dbo_person_address_link.person_id =
       [Hulp: contacts met organisatieID met RM].person_id
GROUP  BY [Hulp: contacts met organisatieID met RM].person_id,
          Iif([name_prefix] <> "", [name_prefix] & " " & [name] & " " &
                                   [name_suffix],
          [name] & " " & [name_suffix]),
          [Hulp: contacts met organisatieID met RM].initials,
          [Hulp: contacts met organisatieID met RM].lastname,
          [Hulp: contacts met organisatieID met RM].middle_name,
          [Hulp: contacts met organisatieID met RM].firstname,
          [Hulp: contacts met organisatieID met RM].sex,
          dbo_address.street,
          dbo_address.postal_code,
          dbo_address.city,
          [Hulp: contacts met organisatieID met RM].organization_id,
          dbo_person_address_link.address_type,
          dbo_person_address_link.address_id
HAVING (( ( dbo_person_address_link.address_type ) = "M" ))
ORDER  BY Iif([name_prefix] <> "", [name_prefix] & " " & [name] & " " &
                                   [name_suffix],
                    [name] & " " & [name_suffix]),
          [Hulp: contacts met organisatieID met RM].lastname; 

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:16

Creepy

Tactical Espionage Splatterer

Om maar even een open deur in te trappen: wat heb je zelf al geprobeer en wat lukte daar dan niet mee? Nu doe je niks meer dan "dit lukt me niet, help", en dat is nu weer net niet de bedoeling hier ;)

Dus wat is de uitkomst van de originele query in Access? Dat zal je helpen te belapen wat al die Hulp: dingen nu precies opleveren. Pas dan kan je gaan bepalen hoe je dat in PHP of MSSQL zal moeten gaan gebruiken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Ik ben nu om te proberen even niet via php aan het werken, maar rechtstreeks op de server. Dit omdat ik dan een wat betere error output terug krijg.

Wat ik nu in feite even heb gedaan is het volgende, die zogenaamde hulp query heb ik in SQL server aangemaakt als een view, met voor het gemak even de naam "test". Als ik deze view run krijg ik gewoon het goede resultaat te zien.

Als ik nu het bovenstaande stukje aanpas (dbo_ er uit, dat is overal nodig voor SQL blijkbaar, en verder ook de hulpquery hernoemt.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
SELECT test.person_id, 
       Iif([name_prefix] <> "", [name_prefix] & " " & [name] & " " & 
                                [name_suffix], 
       [name] & " " & [name_suffix]) AS organisatie, 
       test.initials, 
       test.lastname, 
       test.middle_name, 
       test.firstname, 
       test.sex, 
       address.street, 
       address.postal_code, 
       address.city 
FROM   (person_address_link 
        INNER JOIN address 
          ON person_address_link.address_id = address.address_id) 
       INNER JOIN (organization 
                   INNER JOIN test 
                     ON organization.organization_id = 
                   test.organization_id) 
         ON person_address_link.person_id = 
       test.person_id 
GROUP  BY test.person_id, 
          Iif([name_prefix] <> "", [name_prefix] & " " & [name] & " " & 
                                   [name_suffix], 
          [name] & " " & [name_suffix]), 
          test.initials, 
          test.lastname, 
          test.middle_name, 
          test.firstname, 
          test.sex, 
          address.street, 
          address.postal_code, 
          address.city, 
          test.organization_id, 
          person_address_link.address_type, 
          person_address_link.address_id 
HAVING (( ( person_address_link.address_type ) = "M" )) 
ORDER  BY Iif([name_prefix] <> "", [name_prefix] & " " & [name] & " " & 
                                   [name_suffix], 
                    [name] & " " & [name_suffix]), 
          test.lastname;


Als ik deze query nu vervolgens wil gaan uitvoeren krijg ik van SQL server de onderstaande errors:
code:
1
2
3
4
5
6
7
8
9
10
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '<'.
Msg 1038, Level 15, State 4, Line 2
An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Add a name or single space as the alias name. 
Msg 1038, Level 15, State 4, Line 23
An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Add a name or single space as the alias name. 
Msg 102, Level 15, State 1, Line 37
Incorrect syntax near 'person_address_link'.
Msg 1038, Level 15, State 4, Line 38
An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Add a name or single space as the alias name.


Voor mijn idee gaat er behoorlijk wat mis bij die IIf blokken, alleen snap ik dit helaas nog niet zo goed.

Maar even terzeide, er zal toch zeker een betere oplossing zijn om die query's via een tool te kunnen converteren zodat ik "echte" sql query's over ga houden? Want ik kan me niet voorstellen dat iedere programmeur al dit werk heeft met iedere query, zeker niet als je spreekt over honderden query's :?

Hopelijk kunnen jullie me dus sowieso even met die query op weg helpen, maar ik denk toch dat dit handiger moet kunnen...

Alvast bedankt! _/-\o_

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Wanneer je de query, dus het stuk SQL, goed hebt, dan kun je dit toch gewoon in PHP gaan zetten? Of je nu via PHP een query naar Access stuurt of naar SQL Server (MSSQL), dat maakt niets uit. Het is nog steeds gewoon een stuk SQL dat naar de database wordt gestuurd.

Offtopic: Waarom wordt door diverse personen verwezen naar MySQL wanneer de TS toch duidelijk aangeeft dat het om MSSQL gaat?
voor een MSSQL server naar een PHP applicatie die ook met MSSQL verbinding maakt.
Dat zijn twee totáál verschillende producten.

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Dat snap ik dat hij dan zo PHP in kan, maar ik doe hem nu even direct op de server omdat ik daar een wat duidelijkere error terug krijg in tegenstelling tot bij PHP.

Maar goed, wat moet ik aan die query dan verbeteren, en is er geen trucje om dit automatisch te kunnen doen met b.v. een tool? Want het is echt gigantisch veel werk anders.

Want zoals een site die de SQL wat netter opmaakt zal er toch ook een dergelijk systeem bestaan? (voor die nettere opmaak verwijs ik even als voorbeeld naar: http://www.dpriver.com/pp/sqlformat.htm)

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 13:26

ReseTTim

Chocolate addicted

ik ga er vanuit dat je weet wat het resultaat moet zijn.. ik zou zeggen begin bij het begin..

SQL:
1
SELECT * FROM dbo_person_address_link


vervolgens breid je deze uit met INNER, LEFT, enz JOINS uit.. een fout kan je zo sneller herleiden. daarnaast wordt waarschijnlijk je query nog leesbaarder ook..

Mijn profiel - Te koop: Overzicht van spullen..


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
ReseTTim schreef op vrijdag 13 augustus 2010 @ 14:12:
ik ga er vanuit dat je weet wat het resultaat moet zijn.. ik zou zeggen begin bij het begin..

SQL:
1
SELECT * FROM dbo_person_address_link


vervolgens breid je deze uit met INNER, LEFT, enz JOINS uit.. een fout kan je zo sneller herleiden. daarnaast wordt waarschijnlijk je query nog leesbaarder ook..
Op zich zou ik dat normaal gesproken ook zo doen, maar het probleem is dat dit query's zijn van een oud collega die precies zijn zoals ze moeten zijn. Als ik dat allemaal op die manier opnieuw moet gaan doen vrees ik dat ik over 10 jaar nog bezig ben. Het is simpelweg veel te veel, en daarnaast weet ik ook niet de specifieke eisen van de gebruikers.

Daarom wil ik het zo simpel mogelijkhouden en heb ik een systeem in PHP ontwikkeld en daar wil ik het liefste gewoon de query's in copy en pasten. Want om nu echt diep SQL te gaan leren zal in mijn geval op het moment te lang duren omdat ik nog met andere zaken bezig ben voor certificeringen.

Ik wil op zich wel iets leren, maar daar staat tegenover dat ik nu die applicatie zo snel mogelijk live wil laten gaan en zo snel als ik mijn huidige "studies" af heb wil ik me ook hierin verder gaan verdiepen.

Daarom hoop ik er ook gewoon op dat iemand een applicatie of web service kent die een dergelijke query kan converteren naar iets wat de SQL server gewoon kan begrijpen.

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Dit is even een deels "offtopic" bericht.

Als ik even kijk zie ik dat het verschil is dat Access JetSQL gebruikt en PHP TSQL. Is het niet mogelijk om dit op de een of andere manier om te zetten met een converter van jetsql naar tsql?

En ondersteund PHP niet als alternatief de optie om JetSQL te kunnen gebruiken?
offtopic:
Hoe installeer ik dat eventueel in bij PHP (Debian 5.0 Lenny)


Bedankt alvast!

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Ik heb me kapot gezocht op Google, maar niet echt een converter kunnen vinden, daarom heb ik besloten om de specifieke functies die in onze query's voorkomen even snel te bestuderen zodat ik weet wat er me moet gebeuren.

Aangezien het toch erg veel blijft wat anders met de hand moet worden omgezet heb ik besloten om wat extra tijd uit te trekken (die ik hier later makkelijk door terugverdien) en zelf de stoute schoenen aan te trekken, kortom... ik ga gewoon zelf een converter bouwen hiervoor! 8)

Hier ben ik nu al aan begonnen, en ben een flink eind op weg.

Nu wil ik wel nog even voor het volgende jullie een vraag stellen, dit is niet specifiek SQL maar PHP.

Ik heb in de bestaande query's blokjes staan genaamd IIf, dit moet nu uiteraard CASE worden.

Het lukt mij nu wel om het 1e deel te vervangen van het blokje met een simpele preg_replace, maar dat trucje gaat niet op voor wat er tussen moet komen te staan.

De 1e , moet namelijk THEN worden, de 2e , moet ELSE worden en het afsluitende ) teken moet END worden.

Het probleem is dat ik even niet weet hoe ik dit zo kan vervangen omdat er op meerdere plaatsen in de query een , of ) teken voorkomt waar dit niet moet worden vervangen, daarom de vraag hoe ik met php ervoor kan zorgen dat specifiek alleen dat goede stukje wordt vervangen.

To Apple or not to Apple? That's the banana!

Pagina: 1