abonnement Unibet Coolblue Bitvavo
pi_67360442
Ik ben bezig om voor mijn stage een opdracht uit te voeren, waar de it mannen aldaar ook niet uit komen. Ik heb ze gevraagd om hulp, maar zij raadden me aan een forum te bezoeken en daar hulp te vragen. Vandaar dat ik dus weer hier een vraag post. Hier is het probleem.

We zijn bezig om een programma te ontwikkelen waarin specialiteiten in kaart worden gebracht. In principe gaat het om matchen van wensen van de gebruiker met de medewerkers die beschikken over specialiteiten. Ik wil met 1 query de matchende medewerkers uit de database halen die beschikt over meerdere tabellen. Er zijn meerdere systemen die gebruik maken van de database dus een mutatie is geen optie. Voor mijn voorbeelden heb ik andere database veldnamen gebruikt.

Tabel structuur
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-----------
Werknemers
-----------
id
name
[meer info]

------------------
specialiteiten
------------------
werknemer_id
specialiteit_naam
waarde
------------------



Tabel inhoud
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
------------
werknemers
------------
 1 - Mark
23 - Pieter
45 - Hans
54 - Willem

--------------------------------------
specialiteiten
--------------------------------------
 1 - OperatingSystems - Windows
 1 - OperatingSystems - Linux
 1 - ProgrammingLanguages - PHP
23 - OperatingSystems - MAC
23 - ProgrammingLanguages - ASP
45 - ProgrammingLanguages - JavaScript
45 - ProgrammingLanguages - PHP
45 - ProgrammingLanguages - ASP.NET
54 - OperatingSystems - Windows
54 - ProgrammingLanguages - ASP.NET
--------------------------------------


Op deze tabellen run ik de volgende query:

Deze werkt niet:
1
2
3
4
5
SELECT w.* 
FROM werknemers w, specialiteiten s 
WHERE w.id = s.werknemer_id 
AND (s.specialiteit_naam = 'OperatingLanguages' AND s.waarde IN ('Windows', 'Mac')) 
AND (s.specialiteit_naam = 'ProgrammingLanguages' AND s.waarde IN ('ASP', 'PHP')) 


Deze werkt wel:
1
2
3
4
SELECT w.* 
FROM werknemers w, specialiteiten s 
WHERE w.id = s.werknemer_id 
AND (s.specialiteit_naam = 'OperatingLanguages' AND s.waarde IN ('Windows', 'Mac')) 


Maar hij moet uitgebreider, zoals in het eerste voorbeeld. Hoe formuleer in de query correct?
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_67360934
Wat moet uitgebreider? Wat wil je precies uit je database laten rollen? Je huidige queries zijn overigens erg slordig, probeer met (LEFT / RIGHT OUTER) JOINs te werken waar het mogelijk is in plaats van 2 hele tabellen leeg te trekken en daar vervolgens een filtering op toe te passen.
pi_67360955
('ASP', 'PHP')) moet dat niet ('ASP.NET', 'PHP')) zijn?
pi_67361146
quote:
Op dinsdag 24 maart 2009 16:08 schreef Tuvai.net het volgende:
Wat moet uitgebreider? Wat wil je precies uit je database laten rollen? Je huidige queries zijn overigens erg slordig, probeer met (LEFT / RIGHT OUTER) JOINs te werken waar het mogelijk is in plaats van 2 hele tabellen leeg te trekken en daar vervolgens een filtering op toe te passen.
De namen van de medewerkers die kunnen werken met Windows en MAC én gespecialiseerd zijn in PHP en ASP wil ik er uit halen..

Gaat het werken wanneer ik left/right/inner joins ga gebruiken? Nooit gedaan namelijk...
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
  dinsdag 24 maart 2009 @ 16:19:10 #80
46383 Tiemie
sowieso wel!
pi_67361284
quote:
Op dinsdag 24 maart 2009 16:15 schreef markiemark het volgende:

[..]

De namen van de medewerkers die kunnen werken met Windows en MAC én gespecialiseerd zijn in PHP en ASP wil ik er uit halen..

Gaat het werken wanneer ik left/right/inner joins ga gebruiken? Nooit gedaan namelijk...
Je voorbeeld-data voldoet niet aan je where. Daarom krijg je 0 results.

Je doet een WHERE namelijk op 1 row en er is geen row die op beide matched.
pi_67361334
quote:
Op dinsdag 24 maart 2009 16:19 schreef Tiemie het volgende:

[..]

Je voorbeeld-data voldoet niet aan je where. Daarom krijg je 0 results.

vind zelf onderstaande netter.
[ code verwijderd ]


Thnx! Hier ga ik ff mee aan de slag!
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
  dinsdag 24 maart 2009 @ 16:22:49 #82
46383 Tiemie
sowieso wel!
pi_67361423
quote:
Op dinsdag 24 maart 2009 16:20 schreef markiemark het volgende:

[..]

Thnx! Hier ga ik ff mee aan de slag!
zie edit
pi_67361430
Voorbeeldje om namen op te halen van mensen die gespecialiseerd zijn in OperatingSystem Windows:

1
2
3
4
5
6
7
8
SELECT
    w.Naam
FROM
    medewerkers w RIGHT OUTER JOIN
        specialiteiten s ON s.werknemer_id = w.id
WHERE
    s.specialiteit_naam = 'OperatingSystems' AND
    s.waarde = 'Windows'

OF
1
2
3
4
5
6
7
8
SELECT
    w.Naam
FROM
    specialiteiten s LEFT OUTER JOIN
        werknemers w ON w.id = s.werknemer_id
WHERE
    s.specialiteit_naam = 'OperatingSystems' AND
    s.waarde = 'Windows'


Kort samengevat: Met een LEFT OUTER JOIN ga je vanuit de 'diepere' tabel werken, met RIGHT OUTER JOIN ga je vanuit de bovenliggende tabel werken. Voor de rest is het in jouw geval simpelweg met de WHERE clausule spelen om de goede filtering toe te passen.
  dinsdag 24 maart 2009 @ 16:33:11 #84
56176 Catch22-
Ben je Blind?!
pi_67361847
He?

Sla je nu in een aparte tabel een specialiteit op met een id, naam en waarde?

Ik zou dit toch anders oplossen. Het liefst een tussenentiteit (de kans is groot dat je ooit meerdere specialiteiten wil kunnen toekennen aan iemand) of een veld in de werknemer.
Heel veel groetjes, Catch22
En zoals mijn opa zei: "Al is het meisje nog zo mooi, haar poep stinkt ook". Rust Zacht opa..
Met GHB nooit meer nee
Storneren een optie?
pi_67361952
quote:
Op dinsdag 24 maart 2009 16:33 schreef Catch22- het volgende:
He?

Sla je nu in een aparte tabel een specialiteit op met een id, naam en waarde?

Ik zou dit toch anders oplossen. Het liefst een tussenentiteit (de kans is groot dat je ooit meerdere specialiteiten wil kunnen toekennen aan iemand) of een veld in de werknemer.
Dat sowieso. Een specialiteiten tabel, een gebruikers tabel en een koppeltabel tussen die 2 is voldoende, meerdere vermeldingen in die koppeltabel -> meer specialiteiten.
  dinsdag 24 maart 2009 @ 16:39:09 #86
56176 Catch22-
Ben je Blind?!
pi_67362097
Juist. En het kan nu voor komen dat je bij een entry 'OperatingSystems' hebt, en 'Operating Systems' en 'Opareating systems'. Die zal je niet bijelkaar kunnen rapen.

Dus, normaliseren!
Heel veel groetjes, Catch22
En zoals mijn opa zei: "Al is het meisje nog zo mooi, haar poep stinkt ook". Rust Zacht opa..
Met GHB nooit meer nee
Storneren een optie?
pi_67362248
quote:
Op dinsdag 24 maart 2009 16:39 schreef Catch22- het volgende:
Juist. En het kan nu voor komen dat je bij een entry 'OperatingSystems' hebt, en 'Operating Systems' en 'Opareating systems'. Die zal je niet bijelkaar kunnen rapen.

Dus, normaliseren!
pi_67364251
En wat Catch22 en Scorpie zeggen inderdaad. Zulke veel voorkomende 'stringetjes' elke keer textueel opslaan is vragen om problemen en invoerfouten (en op z'n beurt dus ook filter/selectiefouten).
pi_67365151
heb een mysql vraagje, je waarschijnelijk simpel maar ik snap het niet

ik heb een query om de laatste twee reacties uit een fotoboek te halen, klinkt heel simpel. Nu wil ik echter dat het niet twee reacties op de zelfde foto zijn, dus doe ik groep by foto. Nu heb geeft die dus de laatste twee foto's waar een EERSTE reactie op is geplaatst, als er al eerder op die foto is gereageert is die datum bij die groep dus te oud.

ik gebruik nu
1
2
3
4
5
SELECT * 
FROM fotoboek_comments
GROUP BY foto
ORDER BY datum DESC 
LIMIT 0 , 2

wie weet hoe de laatste twee reacties krijg waar de foto's dus niet het zelfde bij zijn.

mocht het niet duidelijk zijn even een voorbeeldje

foto1 - reactie 3 <- wil dus deze foto met reactie als eerste
foto1 - reactie 2
foto2 - reactie 2 <- en deze foto met reactie als tweede
foto2 - reactie 1 <- krijg deze als eerste
foto3 - reactie 1 <- krijg deze als twee
foto1 - reactie 1

weet niet of het duidelijker wordt zo maar hoop dat iemand me kan helpen
  dinsdag 24 maart 2009 @ 18:33:23 #90
75592 GlowMouse
l'état, c'est moi
pi_67365577
Je wilt reacties waarvan id (of tijd) gelijk is aan het maximum id (of tijd) bij die persoon. Dat kun je in je WHERE zetten met een mooie subquery. De performance met jouw datamodel is wel om te janken.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_67365802
Hallo allemaal,

Ik weet niet of ik hier goed zit, maar ik probeer van alles maar kom er maar niet uit.(ben ook maar een beginneling )
Ik ben bezig met een chatsite met cam's, nu zou ik graag foto's van de cam's op de hoofdpagina zetten en als ze daar op klikken dat ze in die chat-kamer uitkomen.
nu heb ik al een chat met cam waarbij automatisch foto's worden gemaakt om de zoveel tijd en op de hoofdpagina kan zetten, alleen nu komt het probleem: deze foto's blijven staan, dus als de chatkamer vrij is blijft de foto van de laatste chatter staan en ziet niemand dat die chatkamer vrij is.
ik zou daar dan liever een plaatje hebben staan waarop staat dat de room vrij is...

De chatkamers staat op een andere server en ik gebruik ze in een inframe, dus mijn vraag is of er een php code is om te zien of iemand anders die pagina al open heeft?
dus dat het script weet of iemand anders die pagina (waarin het inframe zit voor de chat) open heeft
dus op de hoofdpagina de foto van de cam gebruikt als iemand de pagina open heeft en een "chat open" plaatje als niemand die pagina open heeft?
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
dit ga ik nog even aan de binnekant van mij ogen bekijken
  dinsdag 24 maart 2009 @ 18:44:00 #92
75592 GlowMouse
l'état, c'est moi
pi_67365841
Kijken wanneer het plaatje voor het laatst is aangepast, en indien lang genog, een ander plaatje tonen?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_67365925
quote:
Op dinsdag 24 maart 2009 18:44 schreef GlowMouse het volgende:
Kijken wanneer het plaatje voor het laatst is aangepast, en indien lang genog, een ander plaatje tonen?
Ik kan niet zien wanneer het plaatje aangepast is helaas
dit ga ik nog even aan de binnekant van mij ogen bekijken
  dinsdag 24 maart 2009 @ 18:48:14 #94
187069 slacker_nl
Sicko pur sang
pi_67365981
quote:
Op dinsdag 24 maart 2009 18:19 schreef qwox het volgende:
heb een mysql vraagje, je waarschijnelijk simpel maar ik snap het niet
SELECT distinct(id), date, comment FROM `fotoboek_comments` order by date limit 0,2

Die distinct zorgt ervoor dat je geen dubbele fotoid's hebt in je resultset. De overige zooi lijkt me voor zichzelf spreken.

[ Bericht 16% gewijzigd door slacker_nl op 24-03-2009 18:53:59 ]
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 24 maart 2009 @ 18:55:38 #95
187069 slacker_nl
Sicko pur sang
pi_67366214
quote:
Op dinsdag 24 maart 2009 18:33 schreef GlowMouse het volgende:
De performance met jouw datamodel is wel om te janken.
Onderbouwde uitspraak, vooral omdat je z'n datamodel ook zo goed kan achterhalen bij het zien van 1 SQL statement..
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 24 maart 2009 @ 18:59:23 #96
75592 GlowMouse
l'état, c'est moi
pi_67366349
quote:
Op dinsdag 24 maart 2009 18:48 schreef slacker_nl het volgende:

[..]

SELECT distinct(id), date, comment FROM `fotoboek_comments` order by date limit 0,2
Ziet er leuk uit, maar wekt niet. DISTINCT gaat over een rij.
quote:
Op dinsdag 24 maart 2009 18:55 schreef slacker_nl het volgende:

[..]

Onderbouwde uitspraak, vooral omdat je z'n datamodel ook zo goed kan achterhalen bij het zien van 1 SQL statement..
Daar heb ik voor geleerd. Met dit datamodel krijgt hij die query onmogelijk snel tenzij er slechts een beperkt aantal records in de tabel zit.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_67366603
ik heb niet doorgeleerd in mysl en database modelen.

Ik snap ook weinig van
quote:
Je wilt reacties waarvan id (of tijd) gelijk is aan het maximum id (of tijd) bij die persoon. Dat kun je in je WHERE zetten met een mooie subquery. De performance met jouw datamodel is wel om te janken.
Wat bedoel je met een subquery by where
pi_67366609
Ik heb eigenlijk een aantal vragen die met elkaar te maken hebben:
1.
http://www.sintjoris.sghetplein.nl/Roosters/klas/menu.htm
Dit is een grote tabel waar ik eigenlijk maar 2 dingen uit moet zien te vissen. De inhoud van de 2e kolom. Ik wil de tekst die er staat én de link die erachter zit. Deze wil ik daarna weer in een andere tabel stoppen. Hoe moet ik dat gaan parsen?

2.
Later eventueel in MySQL stoppen, duurt het lang om per entry 2 waardes uit een mysql table te halen? Niet heel erg lang toch?

3.
Ik wil een search box maken die een lijst begint te filteren zodra je begint met typen. Ik kan zo snel geen voorbeeld vinden, maar je snapt het denk ik wel. Type-ahead heet het volgensmij. Hoe krijg je dat dan voor elkaar met een MySQL table?
  dinsdag 24 maart 2009 @ 19:10:56 #99
75592 GlowMouse
l'état, c'est moi
pi_67366752
quote:
Op dinsdag 24 maart 2009 19:06 schreef qwox het volgende:
[..]

Wat bedoel je met een subquery by where
Je kunt bijvoorbeeld zeggen: WHERE id = (SELECT max(id) FROM fotoboek_comments WHERE ...)

Flaccid:
1. Domtree of regex, kies maar
2. Wat is per entry? je wilt van élk record 2 velden? Dat is snel maar je moet geen duizenden records hebben.
3. Zoek eens op xmlHttpRequest, er komt wat JavaScript en PHP bij kijken
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_67367197
Welk pattern gebruiken jullie om objecten aan te maken binnen jullie applicatie? Voor domain objecten lijkt mij een DomainObjectFactory class handig, die elke keer 1 instantie van een object retourneert?

Of gebruiken jullie een generieke oplossing voor al jullie objecten?
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')