[SQL]Google search

Pagina: 1
Acties:

  • QkE
  • Registratie: April 2002
  • Laatst online: 23-05 19:24

QkE

In your face Gnagna

Topicstarter
Af en toe krijg ik de dingen die ik wil niet voor elkaar en waar kom je dan terecht? Juist, bij je medenerds op GoT.
Deze keer een SQL vraagje.

Ik heb een aantal items die in virtuele mapjes zitten. Het mapnummer is opgeslagen bij het item (zie hieronder, vereenvoudigd). Nou wil ik hier een soort van googlesearch doorheen maken.
code:
1
2
3
4
5
6
7
8
9
A   1
A   3
B   1
B   2
C   1
C   2
D   2
F   3
G   3

Hier bedoel ik dus mee dat als je 3 mapjes hebt en je zoekt op 1 en 3, alle items die in mapje 1 én in mapje 3 zitten worden geretourneerd (Zie hieronder). Onderstaand voorbeeld zou alleen A als resultaat moeten geven.

Als het even kan geschieden met zo min mogelijk performanceverlies. Het zou kunnen dat ik even heb zitten slapen en dat het eigenlijk heel erg makkelijk is, maar ik kwam er zo niet uit.
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
1
____________
|    A     |
| B        |
|          |
|        C |
|__________|


2
____________
|          |
|   B      |
|          |
|  D    C  |
|__________|


3
____________
|          |
|   A      |
|       G  |
| F        |
|__________|

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik ken er twee varianten voor:
SQL:
1
2
3
SELECT ...
FROM tabelX X1, tabelX X2, ...
WHERE X1.item = X2.item AND X1.map = y1 AND X2.map = y2

Deze is alleen met meer dan 2a3 mappen vrij sloom. Zoiets kan ook:

SQL:
1
2
3
4
5
SELECT X.item, ...
FROM tabelX X
WHERE X.map IN (y1, y2, ...)
GROUP BY X.item
HAVING COUNT(X.item) = $mapcount

Deze is wat minder doorzichtig, maar werkt als je alleen unieke koppelingen tussen items en mappen hebt ook.

  • QkE
  • Registratie: April 2002
  • Laatst online: 23-05 19:24

QkE

In your face Gnagna

Topicstarter
Wow! Zelf 2 oplossingen. Restecp!!! _/-\o_ Maar je wordt natuurlijk niet voor niks serveradmin ;)

Een vraagje hoor: Hoe moet ik dat doen met die $mapcount? Dat snap ik namelijk niet helemaal (of eigenlijk helemaal niet).

Is dat het aantal mapjes wat in de searchopdracht staat?

Ik krijg op de een of andere manier trouwens problemen met de GROUP BY clause.

[ Voor 32% gewijzigd door QkE op 16-07-2004 11:36 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dat is een getal dat je zelf moet invullen en is inderdaad het aantal mapjes dat je wilt doorzoeken. En het kan best zijn dat de group by niet helemaal volledig is voor jouw specifieke query.

[ Voor 32% gewijzigd door ACM op 16-07-2004 12:06 ]


  • QkE
  • Registratie: April 2002
  • Laatst online: 23-05 19:24

QkE

In your face Gnagna

Topicstarter
Ok. Ik weet nu wat er fout ging met de GROUP BY. Je mag natuurlijk alleen de items waarop je groupt in de de SELECT zetten, anders verrekt hij de query uit te voeren. En die $mapcount is inderdaad het aantal mapjes waar je op zoekt ben ik nou achter. Het is wel een beauty hoor dit ding. Je moet hem even leren waarderen, maar daarna... Net als met goede wijn :)