[ASP/Mysql]Gegevens weergeven die niet in andere tabel staan

Pagina: 1
Acties:

  • denyos
  • Registratie: Februari 2004
  • Laatst online: 17:58
Goeden avond,

ik heb het volgende probleem waar ik weinig informatie over kan vinden.
Ik ben bezig met een verslagen systeem waarbij een verslag toegevoegd moet kunnen worden aan een activiteit. Als er geklikt wordt op verslag toevoegen wordt er een pagina weergegeven met activiteiten die al geweest zijn.Dit werkt helemaal goed.
Nu wil ik er alleen voor zorgen dat wanneer er bij een activiteit al een verslag is het niet mogelijk is om nog een verslag toe te voegen.

Ik begrijp dat ik daarvoor 2 recordsets moet openen in asp en dat ik de activiteiten moet selecteren waar nog geen verslagen van zijn maar ik krijg het helaas niet voor elkaar.

Hieronder heb ik een stukje code neer gezet waarmee ik dacht dat het had moeten werken...

code:
1
2
3
4
    Set activiteiten = Server.CreateObject("ADODB.Recordset")
    activiteiten.ActiveConnection = conn
    activiteitenSQL="SELECT * FROM activiteiten a Where a.activiteiten_Id <> ALL (select v.Verslag_Activiteit_Id from verslag v)"
    activiteiten.Open activiteitenSQL


activiteiten_Id uit de tabel activiteiten is gelijk aan Verslag_Activiteit_Id uit de tabel verslag.

ik weet niet zeker of ALL wordt ondersteund door MySQL (dit had ik uit een oracle leerboek gehaald) maar met een JOIN kreeg ik het ook niet werkend.

[ Voor 6% gewijzigd door denyos op 29-01-2006 20:49 ]

Strava


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-04 17:49

NMe

Quia Ego Sic Dico.

Subqueries zijn pas ondersteund sinds versie 4.1, en het ALL keyword komt me ook niet bekend voor, al zegt dat natuurlijk weinig. Verder is dit niet iets dat je op applicatieniveau moet afhandelen. Je kan toch een UNIQUE constraint aanleggen op database-niveau?

'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.


  • denyos
  • Registratie: Februari 2004
  • Laatst online: 17:58
bedankt voor je snelle antwoord.
heb gelijk even nagekeken en de server blijkt nog op 4.0.24 te draaien. Subqueries blijken dus geen mogelijkheid.

Wat bedoel je precies met een UNIQUE constraint aanleggen? ( ik ben nog vrij nieuw met asp...)

Strava


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-04 17:49

NMe

Quia Ego Sic Dico.

ASP heeft er niks mee te maken. ;) Je moet gewoon tegen MySQL vertellen dat een bepaald veld in je tabel maar één keer dezelfde waarde mag hebben; dat veld heeft dus een UNIQUE constraint nodig. [google=site:mysql.com unique constraint] zou je verder moeten kunnen helpen. :)

'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.


  • denyos
  • Registratie: Februari 2004
  • Laatst online: 17:58
okay dat begrijp ik nog

ik zal nog even proberen duidelijker uit te leggen.
Als je op verslag toevoegen klikt krijg je een lijstje te zien met activiteiten die geweest zijn. Nu wil ik in dit lijstje niet de activiteiten weergeven waar al een verslag van is, daar hoeft immers geen verslag meer van gemaakt te worden. Daarom denk ik dus dat mijn probleempje wel met ASP/SQL te maken heeft, dit doordat het alleen om weergave gaat en niet om de afhandeling in de database.

[ Voor 20% gewijzigd door denyos op 29-01-2006 21:20 ]

Strava


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

-NMe- schreef op zondag 29 januari 2006 @ 21:11:
ASP heeft er niks mee te maken. ;) Je moet gewoon tegen MySQL vertellen dat een bepaald veld in je tabel maar één keer dezelfde waarde mag hebben; dat veld heeft dus een UNIQUE constraint nodig. [google=site:mysql.com unique constraint] zou je verder moeten kunnen helpen. :)
Daarmee weet je natuurlijk pas na dat je de insert-query probeert of het wel of niet mocht. Ik neem aan dat de topicstarter van te voren wil weten welke er wel of niet nog een verslag nodig hebben.

Voor de query zelf moet je denk ik zoiets hebben als je mysql < 4.1 gebruikt:
[rml][ SQL] Zoeken naar rows die niet in andere table voorkomen[/rml]

en voor als je mysql >= 4.1 gebruikt kan je gewoon je originele subquery gebruiken, maar dan zou ik es naar 'not in' of 'not exists' kijken, in plaats van je vergelijking met ALL.

Nog ee topic met wat meer uitleg: [rml][ MySQL] Missende links in relationele database zoeken.[/rml]

[ Voor 5% gewijzigd door ACM op 29-01-2006 21:22 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-04 17:49

NMe

Quia Ego Sic Dico.

Ah, ik dacht dat je bij het opslaan wilde verhinderen dat je dubbele waarden invoert. :) Dan zou voor wat jij wil een left join de oplossing moeten kunnen zijn:
SQL:
1
2
3
4
SELECT a.*
FROM activiteiten a LEFT JOIN verslag v
ON a.activiteiten_Id = Verslag_Activiteit_Id
WHERE v.Verslag_Activiteit_Id IS NULL

'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.


  • denyos
  • Registratie: Februari 2004
  • Laatst online: 17:58
Hartelijk dank allemaal. Gok dat ik toch is beter moet leren zoeken want ik heb het idd met de left-join optie kunnen oplossen.

[ Voor 11% gewijzigd door denyos op 29-01-2006 21:34 ]

Strava

Pagina: 1