[SQL] Vreemde resultaten van ASP naar PHP

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Ik ben bezig om een ASP pagina naar PHP te vertalen;

Het gaat om een selectie uit een access database.

De database heeft 2 tabellen; persoon en vestigingen
en de relatie tussen de 2 is persoon.vestigingid en persoon.unid.

Ik selecteer een hoop velden en zoek deze als volgt in asp:

code:
1
2
3
FROM persoon, vestiging WHERE 
vestiging.unid = persoon.vestigingid AND ((persoon.archiefredenid Is Null) AND 
(persoon.achternaam Like '%::Achternaam::%')


en in php doe ik nu dit
code:
1
2
3
FROM persoon, vestiging WHERE 
vestiging.unid = persoon.vestigingid AND ((persoon.archiefredenid Is Null)  AND 
(persoon.achternaam Like '%$zoek_naam%')


Op de een of andere manier krijg ik alle velden uit persoon goed geretourneerd (naam telefoonnummer etc), maar 2x
uit de tabel vestiging (plaas, locatie etc).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Naam:   Pietje
Email:  Pietje@bedrijf.nl
Afdeling    afdeling
Functie:    functie
Telefoon: telefoon  
Mobiel: mobiel
Bezoek adres:   Teststraat1, 0000XX, Amsterdam

Naam:   Pietje
Email:  Pietje@bedrijf.nl
Afdeling    afdeling
Functie:    functie
Telefoon:   telefoon
Mobiel: mobiel
Bezoek adres:   Teststraat2, 1234AA, Rotterdam


M.a.w alles uit de tabel persoon is goed opgehaald en gefilterd, maar voor vestiging krijg ik meerdere resultaten, waar dan dezelfde naam bij gegooid wordt.

Ik krijg er inmiddels geen touw meer aan vast geknoopt...

Acties:
  • 0 Henk 'm!

Verwijderd

dit is toch een SQL/MySQL probleem? en geen ASP/PHP probleem?

Ik zou eens kijken voor de JOIN functie van sql/mysql, dat dient volgens mij om 2 tabellen te selecteren en aan elkaar te hangen.

Edit: ah, een acces database, never mind. Maar toch eens kijken om te werken met een Join. In Acces zelf kan je trouwens je Queries grafisch opstellen en uitproberen.

[ Voor 30% gewijzigd door Verwijderd op 30-01-2008 22:54 ]


Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
idd een SQL probleem ja...

Inner Joins (relaties gelegd via access) heb ik geprobeerd en ik kom op exact hetzelfde resultaat uit...

Access... i know :X maar het is iets wat tijdelijk offsite moet draaien en er is geen MySQL beschikbaar

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Is vestiging.unid wel uniek?
Het klinkt mij namelijk gewoon als een standaard join waarbij vestiging.unid niet uniek is en dus 2 rijen geeft.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:41

Dido

heforshe

Van wat ik begrijp heb je dus Pietje in vestiging 1 en Pietje in vestiging 2. Wat is je probleem nu?

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Pietje hoort maar in 1 vestiging thuis; en ja, vestiging.unid is uniek (primary key zelfs).

Ik heb het nu met een left join geprobeerd, maar dan krijg ik sowieso dubbele results...

In PHP kan ik het er makkelijk uitfilteren natuuurlijk, maar het lijkt me ook te moeten kunnen vanuit de query

Acties:
  • 0 Henk 'm!

Verwijderd

distinct

Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Ik kom er net wel achter dat het verschil in hoofdletter gebruik zit;

vestiging.unid=2B005u (Vestiging1)
vestiging.unid=2B005U (Vestiging2)

Select distinct maakt hier niet uit...

Ik test het nu ff vanuit Access, in PHP maak ik gebruik van de ODBC connector voor Ms Access

/edit:

Hm, wanneer ik alleen records retourneer zonder een WHERE clause gaat het goed, maar met WHERE dan wordt er niet meer gekeken naar hoofdletters en de id-velden.

Is dit normaal of zit ik nu iets geks te doen?

[ Voor 32% gewijzigd door LiquidSmoke op 31-01-2008 08:24 ]


Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
ODBC voorziet wellicht in tolower() of toupper() - achtige constructies: LCase() of UCase() vertelt de doc me.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

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.


Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Idd...

Helaas kan ik dit niet gebruiken, omdat de vestiging met hoofdletter of kleine letter zou kunnen zijn...

Ik probeer nu in access het tabelontwerp te wijzigen zodat het vestiging.unid Geindexeerd zonder duplicaten zou zijn krijg ik een fout omdat er velden niet uniek zouden zijn.

Ik heb wel e.a. gevonden over collatie, maar volgens mij maalt access daar niet echt om.

hm, ik denk dat een categorie move trouwens wel op zijn plaats is...

Acties:
  • 0 Henk 'm!

  • Moraelyn
  • Registratie: Januari 2007
  • Laatst online: 12-08-2024
id wijzigen of is dat een probleem?

Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Mja het zijn plm 80 locaties, en 1573 personen... en aangezien de odbc driver niet goed omgaat met hoofdletters en kleine letters zal dus bijna alles met de hand moeten.

Ik ben er iig wel uit dat het aan het hoofdlettergebruik ligt. de orginele database draait op MSSQL, die er blijkbaar toch beter mee omgaat...

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

met die UCase & LCase converteer je vziw alles naar Upper resp. Lower case, dan zou het hoofdlettergebruik in de originele velden niet uit mogen maken

Acties:
  • 0 Henk 'm!

  • Moraelyn
  • Registratie: Januari 2007
  • Laatst online: 12-08-2024
TheRookie schreef op donderdag 31 januari 2008 @ 13:20:
met die UCase & LCase converteer je vziw alles naar Upper resp. Lower case, dan zou het hoofdlettergebruik in de originele velden niet uit mogen maken
Dat gaat natuurlijk niet werken. Je weet immers van te voren niet welke vestiging de goede is. Dit kan de vestiging zijn met de kleine letter of de vestiging met de hoofdletter.

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Gebruik van strings als sleutels is al niet zo handig, maar case-sensitive strings??? Wordt het niet eens tijd om je database ontwerp tegen het licht te houden?

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Je hebt helemaal gelijk; had de opmerking van de TS anders geïnterpreteerd dan bedoeld.
licht offtopic: ligt het aan mij of is de opbouw van vestiging.unid niet zo heel handig gekozen ?

Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Lol, het ontwerp is niet van mij, maar van een zeer bekend nederlands bedrijf :X

Ik heb nu het volgende gedaan;

Een testomgeving met SQL Server 2000 SP4 Developer edition, hier de complete database naartoe gepompt (via enterprise manager, dus rechtstreeks).

Alles werkte in 1 keer, hier werkt de case sensitivity dus wel.

Nu draait op de offsite locatie wel een MySQL database, ook hier heb ik alles naartoe gepompt via MSSQL2MYSQL, hier weer hetzelfde probleem.

Het is dus het crappy design wat voor problemen zorgt.

Nah dan maar zorgen dat daar ook Mssql2000 gaat draaien (tis maar tijdelijk).

Tenzij iemand een magische optie heeft om binnen ODBC/MySQL case sensitivity in te schakelen....

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Zoals mensen al hebben gezegd, gewoon LCase gebruiken.
SELECT a, b FROM foo, bar WHERE LCase(foo.id) = LCase(bar.foo_id)

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Moraelyn
  • Registratie: Januari 2007
  • Laatst online: 12-08-2024
Wolfboy schreef op vrijdag 01 februari 2008 @ 04:10:
Zoals mensen al hebben gezegd, gewoon LCase gebruiken.
SELECT a, b FROM foo, bar WHERE LCase(foo.id) = LCase(bar.foo_id)
En dan levert het nog steeds twee records op en dat wil de TS niet. Geen optie dus

vestiging.unid=2B005u (Vestiging1)
vestiging.unid=2B005U (Vestiging2)

Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 04-09 20:24

BHR

Misschien helpt binary comparison (mysql)?
http://dev.mysql.com/doc/refman/5.1/en/cast-functions.html

[ Voor 4% gewijzigd door BHR op 01-02-2008 14:11 ]

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

  • LiquidSmoke
  • Registratie: Maart 2001
  • Laatst online: 11-09 09:36
Tnx voor tip, had er nog niet van gehoord (ben verder niet zo bekend met SQL)...

Inmiddels is er een Mssql 2000 server in de lucht, maar voor later zal ik binary comparison eens proberen...
Pagina: 1