[SQL/ASP] sql joins helaas.. toch toepassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Andre1234
  • Registratie: November 2009
  • Laatst online: 01-01-2022
Lange tijd heb ik sql joins weten te omzeilen. Liever maakte ik 2 aparte queries om een bepaalt resultaat op te halen. De volgende situatie vraagt denk ik toch om een join query. Na een tijdje te gestoeid te hebben zonder rusultaat wil ik jullie hulp vragen.

Het gaat om een lijst van personen die zich geabonneerd hebben op een bepaalde rubriek. Deze lijst haal ik nu op met 2 aparte queries. Nadeel hiervan is dat ik niet kan sorteren op naam.

Dit is mijn huidige code
ASP:
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
'****************************************************************************** 
'   Haal de RubriekId uit de link
'******************************************************************************

RubriekId = ""&Request ("RubriekId")

'****************************************************************************** 
'   Haal de gebruikers op welke zich geabboneerd hebben.
'******************************************************************************

MailRubriekQuery = "SELECT * FROM MailRubriek WHERE RubriekId = "&RubriekId&" AND Mail = 'aan'"
Set objRsMailRubriekQuery = Conn.Execute(MailRubriekQuery)

Do Until objRsMailRubriekQuery.EOF
VarUserId = objRsMailRubriekQuery("UserId")
GetUsernameQuery = "SELECT * FROM tblUsers WHERE UserID = "&VarUserID&""
Set objRsGetUsernameQuery = Conn.Execute(GetUsernameQuery)
%>
  <tr>
    <td><font size="1"><%Response.Write (objRsGetUsernameQuery("name"))%></font></td>
    <td><font size="1"><%Response.Write (objRsGetUsernameQuery("email"))%></font></td>
  </tr>
<%
objRsMailRubriekQuery.MoveNext
Loop


Wat ik geprobeerd heb (via w3schools.com en google en een paar uur resultaatloos queries proberen) om een querie te maken die de naam gesorteerd ophaalt.

Acties:
  • 0 Henk 'm!

  • JoSchaap
  • Registratie: November 2000
  • Laatst online: 09-10 22:04

JoSchaap

Had a life, got a modem..

wat is er mis met JOIN ? ik vind joins persoonlijk juist altijd erg fijn werken :) en in bovenstaand lijkt het me ook de gemakkelijkste oplossing :)

GamePC : Inv. : GameRoom : YouTube : Steam : Twitch : BattelNET


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Andre1234 schreef op dinsdag 22 juni 2010 @ 09:45:
Lange tijd heb ik sql joins weten te omzeilen. Liever maakte ik 2 aparte queries om een bepaalt resultaat op te halen. De volgende situatie vraagt denk ik toch om een join query. Na een tijdje te gestoeid te hebben zonder rusultaat wil ik jullie hulp vragen.
JOIN is geen acroniem van een of andere enge SOA, het is juist een essentieel begrip in SQL-land. Beter leer je ermee werken in plaats van ze te ontwijken :)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • JoSchaap
  • Registratie: November 2000
  • Laatst online: 09-10 22:04

JoSchaap

Had a life, got a modem..

Zo moeilijk zijn joins niet als je ze eenmaal doorhebt. persoonlijk ben ik echter geen fan van het gebruiken van select * icm joins, maar even puur als voorbeeld:

code:
1
2
3
4
SELECT * FROM MailRubriek MR JOIN tblUsers TU 
on MR.UserID = TU.UserID 
WHERE RubriekId = "&RubriekId&" 
AND Mail = 'aan'

GamePC : Inv. : GameRoom : YouTube : Steam : Twitch : BattelNET


Acties:
  • 0 Henk 'm!

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Andre1234 schreef op dinsdag 22 juni 2010 @ 09:45:
*knip*
Het gaat om een lijst van personen die zich geabonneerd hebben op een bepaalde rubriek. Deze lijst haal ik nu op met 2 aparte queries. Nadeel hiervan is dat ik niet kan sorteren op naam.
*knip*
Ik wil niet vervelend doen, maar in plaats van een query met een join (die SQL efficiënt kan uitvoeren) voer jij voor elk resultaat wat je terugkrijgt nog een query uit. Elke query geeft weer extra overhead. Ipv 1 query voer jij 1+aantal resultaten uit de de query uit. Wat zou nou efficiënter zijn?

[ Voor 55% gewijzigd door MueR op 22-06-2010 10:34 . Reden: Even flink stuk loze quote geknipt ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12:04

Creepy

Tactical Espionage Splatterer

En wat voor JOIN's heb je nu zelf al geprobeerd? Laat daar eens wat van zien. JOIN's zijn echt een basis SQL iets. Als je niet snapt wast een JOIN is en doet, dan wordt het toch wel eens tijd je daar echt in te gaan verdiepen. Zie ook Programming FAQ - SQL - Hoe werken joins

"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!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Hier ook nog een complete uitleg met een fraai plaatje:
Afbeeldingslocatie: http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_V2.png

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 09-10 01:21

Nick_S

++?????++ Out of Cheese Error

Nog even een niet gerelateerde tip, maar kijk even naar je naamgevingsconventies.

MailRubriek vs. tblUsers
RubriekId vs. UserID

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • defcon84
  • Registratie: September 2009
  • Laatst online: 09-10 13:17

defcon84

Multipass?

Ik snap je onverklaarbare angst voor SQL joins niet, gewoon gebruiken die Joins.. :?

Maar ik zou eerder schrik hebben voor SQL Injection.
Want wat jij hier hebt, is een gigantisch groot veiligheidslek! 8)7
Andre1234 schreef op dinsdag 22 juni 2010 @ 09:45:
ASP:
1
2
3
4
5
'   Haal de RubriekId uit de link
...
RubriekId = ""&Request ("RubriekId")
...
MailRubriekQuery = "SELECT * FROM MailRubriek WHERE RubriekId = "&RubriekId&" AND Mail = 'aan'"
oplossing is makkelijk gevonden via google:
http://blogs.iis.net/nazi...ion-from-classic-asp.aspx

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Imho horen waarschuwingen over SQL injection niet in een topic waar een elementaire SQL vraag gesteld wordt - één probleem tegelijk oplossen, de OP heeft waarschijnlijk genoeg aan één probleem tegelijk. Niet om als belerend gezien te worden, maar dat is gewoon iets wat me opvalt in dit soort topics.

@OP, angst voor joins is begrijpelijk, zeker als je ze nog niet helemaal goed begrijpt. Ik zou voorstellen om eens een middagje een cursus of een set oefeningen uit te gaan voeren met een voorbeelddatabase (die van Microsoft SQL server, naam ben ik even vergeten, moet wel goed zijn). De Microsoft documentatie over MSSQL is ook heel uitgebreid, en ook daarin staan veel oefeningen en voorbeelden.

Je zou jezelf vertrouwd moeten maken met queries en joins en al dat soort zaken alvorens je het toe gaat passen op een project(je) zoals deze.

Je query zal in dit geval ongeveer worden als:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
  MailRubriek.*
  ,tblUsers.naam
  ,tblUsers.email

FROM
  MailRubriek

LEFT JOIN tblUsers
   ON tblUsers.UserID = MailRubriek.UserID

WHERE
  MailRubriek.RubriekId = "&RubriekId&"
  AND MailRubriek.Mail = 'aan'


Schrik niet van de syntax, da's iets persoonlijks. Zo kun je makkelijk regels uitcommentarieren zonder al te veel syntax updates te doen. Ik zou adviseren om je query in een query editor / omgeving uit te werken alvorens het resultaat hiervan in ASP om te zetten naar HTML.

[ Voor 5% gewijzigd door YopY op 22-06-2010 16:49 ]


Acties:
  • 0 Henk 'm!

  • Webdoc
  • Registratie: Maart 2001
  • Laatst online: 17-03 04:19

Webdoc

Echte Männer fahren Mercedes

Kwam dit toevallig tegen bij het zoeken naar het een en ander... ik hoop dat je SQL skills ondertussen toch wel beter zijn, je doet zo ongeveer alles op de niet-optimale manier.

Where Email ='aan' moet toch echt een BIT veld zijn (dus 1 or 0). GEEN tekst veld. Sowieso wil je lookups op niet-numerieke velden ALTIJD voorkomen. SQL Server is veel sneller en efficienter als je zoekt op getallen.

Same goes for joins, je doet GEEN joins op text-velden, altijd op integers. Dat is duizend keer rapper. Je geeft elke tabel een ID (en nee, die noem je niet "ID" in elke tabel, tenzij je houdt van raadsels en puzzels) maar SoortID, Soort2ID, etc.)

W

SuperMicro X11DAi-N Dual Gold 6140 36C/72T 320GB A2000 2x WD770 1TB, 4K + 2x QHD


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Natuurlijk zijn dat allemaal goede tips maar wat hoop je precies te bereiken door na ruim een jaar te reageren in een topic van iemand die al zes maanden niet meer op de site is geweest? :)

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

Pagina: 1