Toon posts:

[ASP\SQL]Getallen selecteren, maar niet 2x dezelfde...

Pagina: 1
Acties:

Verwijderd

Topicstarter
Yow, ik ben nu bezig een eigen forum te maken, en als je op de username klikt moeten alle topics komen waar diegene heeft gepost...leuk een aardig, maar ik krijg het script om alle dubbelen te filteren niet goed :'(

Wat ik nu doe is dit:
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
26
27
28
29
30
31
32
33
34
poster=Request.Querystring("poster")
Set Rsreplyq = Server.CreateObject("Adodb.Recordset")
Sqlreplyq = "SELECT * FROM replys WHERE ( poster='" & poster & "') order by reply_id"
Rsreplyq.Open Sqlreplyq, DbConn

if Rsreplyq.EOF then

Response.Write "Invalid username!"

else

Response.Write "All topic where " & poster & " posted:<br>"
temp = "0"

Do until Rsreplyq.EOF
topic_id = Rsreplyq("topic_id").value
if topic_id = temp then

else

Set Rstopicq = Server.CreateObject("Adodb.Recordset")
Sqltopicq = "SELECT * FROM topic WHERE topic.[topic_id]=" & topic_id
Rstopicq.Open Sqltopicq, DbConn
Response.Write Rstopicq("title").value & "<br>"
Rstopicq.Close
Set Rstopicq = Nothing

end if
temp = topic_id
Rsreplyq.MoveNext

loop

end if

maar dit haalt alleen de dubbelen eruit als die onder elkaar staan (na elkaar komen dus in de database) en dat werkt niet goed :'(

Wie helpt mij op de goede weg?

Edit: In elke reply waar de poster "poster" (uit querystring is) word een topic_id gehaald, waardoor je weet ik welk topic die post hoort...En dan wordt met dat topic_id de titel uit de tabel "topics" gehaald, alleen staat in de tabel "replys" dus meerdere keren hetzelfde topic_id bij dezelfde user...

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:44

gorgi_19

Kruimeltjes zijn weer op :9

Iets van "Select DISTINCT TopicTitle ....."?

Daarnaast: Kan je niet beter op PosterID i.p.v. Poster opvragen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 03 oktober 2002 @ 19:46:
Iets van "Select DISTINCT TopicTitle ....."?

Daarnaast: Kan je niet beter op PosterID i.p.v. Poster opvragen?
Ik haal van een post dmv de poster het topic_id op...

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

kijk ook eens naar het gebruik van DISTINCT in je query om je probleem op te lossen
(en kijk naar JOIN's en/of subqueries om je script wat te optimaliseren)

* Annie is een beetje traag :'(

Today's subliminal thought is:


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:44

gorgi_19

Kruimeltjes zijn weer op :9

offtopic:
Erhm.. Er zit trouwens wel een major bug in je code, naar mijn idee. Volgens mij kan ik zo een table weggooien. Ik weet niet of ik de precieze gegevens hiervan mag posten, maar hij staat bekend als de SQL Direct Injection Attack.. :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Annie schreef op 03 oktober 2002 @ 19:49:
kijk ook eens naar het gebruik van DISTINCT in je query om je probleem op te lossen
(en naar het begrip JOIN's om je script wat te optimaliseren)
Bij DISTINCT blijft ie kankeren...:
code:
1
2
3
4
5
Microsoft JET Database Engine error '80040e21' 

Cannot include Memo, OLE, or Hyperlink Object when you select unique values (topic_id). 

/new/forum.asp, line 367

Hiermee wil ik dus alleen unieke topic_id's ophalen, want die kunnen in de tabel replys nl. dubbel voorkomen...

  • Morpheus_at_work
  • Registratie: December 2000
  • Laatst online: 12:55
maak een join tussen titel en reply en voor dan een distinct uit op titel en neem daar in mee de max (replyid)

Canon R6 MARK III, 35mm 1.4 VCM, 50mm 1.4 VCM , 85mm 1.4 VCM , 17-35mm 1.8, 28-70 1.8 , 24-105 1.8 70-200 f2.8


Verwijderd

Topicstarter
Morpheus_at_work schreef op 03 oktober 2002 @ 19:52:
maak een join tussen titel en replay en voor dan een distinct uit op titel en neem daar in mee de max (postdate)
Ikke niet helemaal snappen....
gorgi_19 schreef op 03 oktober 2002 @ 19:51:
offtopic:
Erhm.. Er zit trouwens wel een major bug in je code, naar mijn idee. Volgens mij kan ik zo een table weggooien. Ik weet niet of ik de precieze gegevens hiervan mag posten, maar hij staat bekend als de SQL Direct Injection Attack.. :P
ja? :'(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:44

gorgi_19

Kruimeltjes zijn weer op :9

Je moet ook denk ik * vermijden in je query; je hebt toch niet alle velden nodig.

edit:

En weer is Annie traag... :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Morpheus_at_work
  • Registratie: December 2000
  • Laatst online: 12:55
plaat hier is je tabel design

Canon R6 MARK III, 35mm 1.4 VCM, 50mm 1.4 VCM , 85mm 1.4 VCM , 17-35mm 1.8, 28-70 1.8 , 24-105 1.8 70-200 f2.8


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Verwijderd schreef op 03 oktober 2002 @ 19:51:
[...]

Bij DISTINCT blijft ie kankeren...:
code:
1
2
3
4
5
Microsoft JET Database Engine error '80040e21' 

Cannot include Memo, OLE, or Hyperlink Object when you select unique values (topic_id). 

/new/forum.asp, line 367
Je moet ook alleen de zaken ophalen die je gebruikt en niet "SELECT *"

Today's subliminal thought is:


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:44

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 03 oktober 2002 @ 19:53:
[...]

Ikke niet helemaal snappen....


[...]

ja? :'(
Het schijnt dat nog steeds een x-aantal sites (waaronder een aantal sites die met een content management systeem werken) hier nog steeds gevoelig voor zijn en ik wil geen mensen op een (te) eenvoudige manier op verkeerde ideeen brengen.

Het komt er simpelweg op neer dat je je querystring niet controleert en je gegevens dus direct in je SQL statement uitkomen. Controleren op ' wil bijvoorbeeld wel helpen.. :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ok, ik moet dus een join gaan gebruiken...woei /me heeft nl nog nooit van joins gehoord maar ik zoek ff op w3schools en vind hetvolgende:
code:
1
2
3
4
SELECT field1, field2, field3
FROM first_table
INNER JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield

En nu moet ik dat zelf invullen, is dit dan correct:
code:
1
2
3
4
SELECT title
FROM topics
INNER JOIN replys
ON topics.topic_id = replys.topic_id

?

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

gorgi_19 schreef op 03 oktober 2002 @ 19:53:
Je moet ook denk ik * vermijden in je query; je hebt toch niet alle velden nodig.

edit:

En weer is Annie traag... :P
GVD ;)

maaruh, volgens mij komt onderstaande aardig in de buurt bij wat je wil bereiken
code:
1
2
3
4
5
6
7
8
SELECT title
FROM   topic
WHERE  topic_id IN (
         SELECT DISTINCT topic_id
         FROM   replys
         WHERE  poster = 'naam'
       )
ORDER BY title ASC

Today's subliminal thought is:


Verwijderd

Topicstarter
code:
1
2
3
4
5
Microsoft JET Database Engine error '80040e21' 

Invalid Memo, OLE, or Hyperlink Object in subquery 'topic_id'. 

/new/forum.asp, line 368

Ok...Dit is dus het veld 'topic_id' in 'replys', en dat is idd een memo veld...wat voor veld moet ik hier dan van maken (mag geen autonummering zijn want er zijn dubbelen mogelijk!)

Edit: dit is mn query nu:
code:
1
Sqlreplyq = "SELECT title FROM topic WHERE topic_id IN (SELECT DISTINCT topic_id FROM replys WHERE ( poster='" & poster & "')) ORDER BY title ASC"

Mijn vraag dus: welk soort veld moet 'topic_id' in tabel 'replys' worden?

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Mijn vraag dus: welk soort veld moet 'topic_id' in tabel 'replys' worden?
integer (err, Numeriek dus).
van datum kan je ook beter een datum veld maken (of op z'n minst een varchartekst)

p.s. ik raad aan om eens een basis cursusje SQL te doen.

Today's subliminal thought is:


Verwijderd

Topicstarter
Annie schreef op 03 oktober 2002 @ 20:23:
[...]
p.s. ik raad aan om eens een basis cursusje SQL te doen.
Dat heb ik gedaan neger doos!
Ik heb zelf die hele site dynamisch opgebouwd(t?) dmv sql, zelf een forum gemaakt en dan kom jij aan dat ik SQL MOET GAAN LEREN?! :D :D
[/HK-Mode]
_/-\o_ Integer veld werk idd, nu ff kijken of ie dubbelen er ook uitfiltert...
/me lives in hope
Edit: Woei dank u allen het werkt nu naar behoren _/-\o_

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 03 oktober 2002 @ 20:25:
Dat heb ik gedaan neger doos!
Let jij even op je taal gebruik??
Ik heb zelf die hele site dynamisch opgebouwd(t?) dmv sql, zelf een forum gemaakt en dan kom jij aan dat ik SQL MOET GAAN LEREN?! :D :D
Nou...
Blijkbaar was dat niet voldoende... En aan je code te zien is je forum nog niet af en is je sql-kennis nog niet groot genoeg... Dus er valt altijd nog wel wat sql te leren.

Verwijderd

Topicstarter
ACM schreef op 03 oktober 2002 @ 20:47:
[...]

Let jij even op je taal gebruik??


[...]

Nou...
Blijkbaar was dat niet voldoende... En aan je code te zien is je forum nog niet af en is je sql-kennis nog niet groot genoeg... Dus er valt altijd nog wel wat sql te leren.
1: Ik heb mezelf ingehouden en het doorgestreept ( :o )
2: Ja, er valt altijd nog wel iets te leren, maar ik vind mijn sql kennig toch wel boven het "noob" niveau...ik heb gewoon nog nooit eerder met joins gewerkt (nooit eerder nodig gehad (of er zoals aan het begin gewoon wat anders voor gebouwd :D ))
3: En natuurlijk is mijn forum nog lang niet af, ik zou graag nieuwe features willen maken, maar ik weet nu nog niet welke...misschien kunnen jullie me hier helpen. (link staat in sig)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

Verwijderd schreef op 03 oktober 2002 @ 19:51:
Bij DISTINCT blijft ie kankeren...:
code:
1
2
3
4
5
Microsoft JET Database Engine error '80040e21' 

Cannot include Memo, OLE, or Hyperlink Object when you select unique values (topic_id). 

/new/forum.asp, line 367

Hiermee wil ik dus alleen unieke topic_id's ophalen, want die kunnen in de tabel replys nl. dubbel voorkomen...
Je kan je ook nog afvragen of je topictitel wel een memo-datatype wilt geven. Zit iemand te wachten op een topictitel van 3 A4-tjes? ;)

Exact expert nodig?


Verwijderd

Topicstarter
Crazy_D schreef op 03 oktober 2002 @ 20:52:
[...]

Je kan je ook nog afvragen of je topictitel wel een memo-datatype wilt geven. Zit iemand te wachten op een topictitel van 3 A4-tjes? ;)
Ummmm, je bent wel een beetje laat ;)
Dit veld is allang omgetoverd naar 'integer' veld maar iig thxs voor je moeite :D

Edit: Je beredenering is idd logis(c)h :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 03 oktober 2002 @ 20:52:
1: Ik heb mezelf ingehouden en het doorgestreept ( :o )
Doos is over het algemeen ook een belediging ;)
2: Ja, er valt altijd nog wel iets te leren, maar ik vind mijn sql kennig toch wel boven het "noob" niveau...ik heb gewoon nog nooit eerder met joins gewerkt (nooit eerder nodig gehad (of er zoals aan het begin gewoon wat anders voor gebouwd :D ))
where tabel1.blaat = tabel2.bladiebla is ook een join ;)
Overal waar twee tabellen aan elkaar "gejoined" worden is sprake van een join bij mijn weten :)

Verwijderd

Topicstarter
ACM schreef op 03 oktober 2002 @ 21:15:
[...]

Doos is over het algemeen ook een belediging ;)

[...]

where tabel1.blaat = tabel2.bladiebla is ook een join ;)
Overal waar twee tabellen aan elkaar "gejoined" worden is sprake van een join bij mijn weten :)
1: Oh sorry :)
2: Ja...Ok...Maar daar had ik dus nog nooit eerder mee gewerkt...kan toch :?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 03 oktober 2002 @ 21:38:
2: Ja...Ok...Maar daar had ik dus nog nooit eerder mee gewerkt...kan toch :?

Kan hoor :)
Alhoewel ik dan niet echt het idee heb dat je echt een ervaren SQL-ert bent (ok, ook geen n00b meer natuurlijk) :)

Verwijderd

Topicstarter
gorgi_19 schreef op 03 oktober 2002 @ 19:56:
[...]

Het schijnt dat nog steeds een x-aantal sites (waaronder een aantal sites die met een content management systeem werken) hier nog steeds gevoelig voor zijn en ik wil geen mensen op een (te) eenvoudige manier op verkeerde ideeen brengen.

Het komt er simpelweg op neer dat je je querystring niet controleert en je gegevens dus direct in je SQL statement uitkomen. Controleren op ' wil bijvoorbeeld wel helpen.. :P
Daar heb ik gelukkig al een tijdje geleden maatregelen tegen genomen... :)
Annie schreef op 03 oktober 2002 @ 20:23:
[...]

integer (err, Numeriek dus).
van datum kan je ook beter een datum veld maken (of op z'n minst een varchartekst)
Ook als de datum in deze vorm is:
02/10/2002 21:09:14

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:44

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 04 oktober 2002 @ 08:51:
[...]

Daar heb ik gelukkig al een tijdje geleden maatregelen tegen genomen... :)
Volgens je code kan ik het nog steeds...
Ook als de datum in deze vorm is:
02/10/2002 21:09:14
Ja, date (of datetime-veld) in Access kan je zo instellen door middel van een format van de date. (krom uitgelegd, je weet wel wat ik bedoel, denk ik)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 04 oktober 2002 @ 08:57:
[...]
Volgens je code kan ik het nog steeds...
Oh...
Maar boven postreply en editreply heb ik devolgende code staan...
code:
1
2
post=Replace(post, "'", "")
post=Replace(post, Chr(34), "")

Moet die dan ook hier? Bij de querystring?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:44

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 04 oktober 2002 @ 09:02:
[...]

Oh...
Maar boven postreply en editreply heb ik devolgende code staan...
code:
1
2
post=Replace(post, "'", "")
post=Replace(post, Chr(34), "")

Moet die dan ook hier? Bij de querystring?
Ik viel meer over deze:

code:
1
2
3
poster=Request.Querystring("poster")
Set Rsreplyq = Server.CreateObject("Adodb.Recordset")
Sqlreplyq = "SELECT * FROM replys WHERE ( poster='" & poster & "') order by reply_id"

Hierin is deze nog wel manipuleerbaar, naar mijn idee....
Immers, de pagina: blaat.asp?poster=' AND ......

En de rest kan je wel raden.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ok gefixed :D
Willen gorgi_19 of Annie hun naam nog ergens op mijn topics-van-user-pagina zien?

Verwijderd

Topicstarter
ACM schreef op 03 oktober 2002 @ 23:40:

[...]

Kan hoor :)
Alhoewel ik dan niet echt het idee heb dat je echt een ervaren SQL-ert bent (ok, ook geen n00b meer natuurlijk) :)
FF op w3schools de sql test gedaan, zonder te spieken natuurlijk!
code:
1
2
3
4
5
6
7
8
9
W3Schools SQL Quiz
Result:
18 of 20
90%

You can be proud of yourself!

Time Spent
3:20

Mijn antwoorden:
code:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
W3Schools SQL Quiz
SQL QUIZ Points: 18 of 20  


1. What does SQL stand for?

 Correct Answer!
 

--------------------------------------------------------------------------------

2. Which SQL command extracts data from a database?

 Correct Answer!
 

--------------------------------------------------------------------------------

3. Which SQL command updates data in a database?

 Correct Answer!
 

--------------------------------------------------------------------------------

4. Which SQL command deletes data from a database?

 Correct Answer!
 

--------------------------------------------------------------------------------

5. Which SQL command inserts new data in a database

 Correct Answer!
 

--------------------------------------------------------------------------------

6. With SQL, how do you select the column named "FirstName" from a table named "Persons" ?

 Correct Answer!
 

--------------------------------------------------------------------------------

7. With SQL, how do you select all the columns from a table named "Persons" ?

 Correct Answer!
 

--------------------------------------------------------------------------------

8. With SQL, how do you select all the records from a table named "Persons" where the "FirstName" is "Peter" ?

 Correct Answer!
 

--------------------------------------------------------------------------------

9. With SQL, how do you select all the records from a table named "Persons" where the "FirstName" starts with an "a" ?

You answered:  SELECT * FROM Persons WHERE FirstName LIKE '%a'  

 Wrong Answer!


--------------------------------------------------------------------------------

10. The AND operator displays a record if ANY conditions listed are true. The OR operator displays a record if ALL of the conditions listed are true

 Correct Answer!
 

--------------------------------------------------------------------------------

11. With SQL, how do you select all the records from a table named "Persons" where the "FirstName" is "Peter" and the "LastName" is "Jackson" ?

 Correct Answer!
 

--------------------------------------------------------------------------------

12. With SQL, how do you select all the records where the "LastName" is alphabetically between (and including) "Hansen" and "Pettersen" ?

 Correct Answer!
 

--------------------------------------------------------------------------------

13. Which SQL keyword is used to return only different values?

 Correct Answer!
 

--------------------------------------------------------------------------------

14. Which SQL keyword is used to sort the result?

 Correct Answer!
 

--------------------------------------------------------------------------------

15. With SQL, how can you return all the records from a table named "Persons" sorted REVERSE alphabetically by "FirstName" ?

 Correct Answer!
 

--------------------------------------------------------------------------------

16. With SQL, how can you insert a new record into the "Persons" table?

You answered:  INSERT VALUES ('Jimmy', 'Jackson') INTO Persons  

 Wrong Answer!


--------------------------------------------------------------------------------

17. With SQL, how can you insert "Olsen" as the "LastName" in the "Persons" table?

 Correct Answer!
 

--------------------------------------------------------------------------------

18. How can you change "Hansen" into "Nilsen" in the "LastName" column in the Persons Table?

 Correct Answer!
 

--------------------------------------------------------------------------------

19. With SQL, how can you delete the records where the "FirstName" is "Peter" in the Persons Table?

 Correct Answer!
 

--------------------------------------------------------------------------------

20. With SQL, how can you return the number of records in the "Persons" table?

 Correct Answer!

Srry voor de lap, maar ik wil ff laten zien dat ik toch wel iets van sql af weet :) (en het was nog in het engels ook! :+ )

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Verwijderd schreef op 04 oktober 2002 @ 09:13:
Willen gorgi_19 of Annie hun naam nog ergens op mijn topics-van-user-pagina zien?
Nee
Verwijderd schreef op 05 oktober 2002 @ 00:15:
FF op w3schools de sql test gedaan, zonder te spieken natuurlijk!
[knip]
Srry voor de lap, maar ik wil ff laten zien dat ik toch wel iets van sql af weet :) (en het was nog in het engels ook! :+ )
Je hoeft je van mij niet zo te bewijzen. Je zal ongetwijfeld wel het e.e.a. voor elkaar kunnen krijgen in SQL. Maar ik hoop dat je het met mij en ACM eens bent als wij aangeven dat er naar onze mening nog een heleboel te leren is voor je. Vandaar mijn opmerking over het cursusje (ze behandelen bijna allemaal joins).

Overigens is de sql quiz van w3schools niet van het allerhoogste niveau natuurlijk ;)
No offence.

Today's subliminal thought is:


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:44

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 04 oktober 2002 @ 09:13:
Ok gefixed :D
Willen gorgi_19 of Annie hun naam nog ergens op mijn topics-van-user-pagina zien?
En voor mij geldt hetzelfde als voor Annie.. :P (Hoeft dus niet)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ok, ik zal als ik tijd heb nog wat "advance" sql gaan doorspitten... :)
Pagina: 1