[PHP/ MySQL] Error in inner join query

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • !GN!T!ON
  • Registratie: September 2006
  • Laatst online: 18-09 14:20
ik ben een website(je) aan het bouwen in PHP, waar je projecten en werknemers kan aanmaken.

aan de projecten kan je dan werk uren toevoegen en een overzicht zien van het totaal aantal uur gewerkt aan een project, welke werknemers er aan hebben gewerkt, hoeveel uur per werknemer en wanneer.

nou heb ik in mijn DB 2 tabellen, namelijk:

werknemer en projecten

de tabel werknemer heeft de velden ID, voornaam, tussenvoegsel, achternaam, dit is voorlopig genoeg maar mischien dat ik hier later nog dingen aan toevoeg zoals adres(sen) en telefoon nummers.

de tabel projecten heeft de velden, ID, projectnaam, uren, werknemerid, begin (datum), eind (datum), besteedop (datum)

dus:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
--WERKNEMER
-ID
-voornaam
-tussenvoegsel
-achternaam

--PROJECTEN
-ID
-projectnaam
-werknemerid
-uren
-begin
-eind
-besteedop


ik heb het inmiddels werkend dat ik een overzicht krijg van het aantal uur gewerkt aan een bepaald project, maar nou probeer ik daar de naam van de werknemer welke uren aan het project heeft besteed en de datum waarop erbij te krijgen. dus moet ik werknemerid in de tabel projecten koppelen aan het veld ID in de tabel werknemer. (als ik het goed begrijp met wet ik tot nog toe heb gelezen) dit kan met INNER JOIN ON heb ik gelezen.

de bedoeling is dus een tabel ongeveer zoals dit:

code:
1
2
3
4
projectnaam            uren             werknemer          gewerkt op
blablaproject           4:34              Jan Lamers         03-06-2009
blablaproject           3:14              Jan Lamers         01-07-2009
blablaproject           1:36              Karel Kreeuw       04-08-2009


nou heb ik deze query (het zal voor jullie wel ranzige code zijn, maar ik ben pas net met php/mysql bezig, so give me some slack :> )

code:
1
2
3
4
5
6
7
8
9
$query = "SELECT 
                project.uren
                werknemer
          FROM project WHERE projectnaam = \"$project\" AND uren IS NOT NULL
          INNER JOIN
                werknemer
          ON
                werknemer.voornaam = project.werknemer";
$result = mysql_query($query) or die ('Error: '.mysql_error ());


helaas geeft dit mij dit terug:
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN werknemer ON werknemer.voornaam = project.werknemerid' at line 5
ik ben de hele dag al aan het rondzoeken en ben o.a. afgegaan op de info hier hier en hier

maar ik staar mij volgens mij blind want ik kom geen steek verder :(

is er iemand die mij een trap in de goede richting kan geven? (niet te hard trappen aub O-) )

Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
FROM project WHERE projectnaam = \"$project\" AND uren IS NOT NULL JOIN
          INNER JOIN


Ik denk dat je een 'JOIN' teveel hebt staan aan het einde van de eerste zin. Nu staat er dus 'JOIN INNER JOIN' en dat is inderdaad incorrect

Acties:
  • 0 Henk 'm!

  • !GN!T!ON
  • Registratie: September 2006
  • Laatst online: 18-09 14:20
oh sorry, copy paste, vout die join achter null had ik al weg gewerkt voor ik dit poste, sorry

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Waar hoort mijn topic?

PHP dus een kickje naar de buren ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
$query = "SELECT 
                project.uren
                werknemer.*
          FROM project, werknemer WHERE project.projectnaam = \"$project\" AND project.uren IS NOT NULL
          AND
                werknemer.voornaam = project.werknemer";

Probeer dat eens... Beetje een verkapte manier maar het is gewoon een inner join. Is het trouwens project of projecten?

edit:
Of moet "werknemer.voornaam = project.werknemer" niet "werknemer.id = project.werknemerid" zijn?

[ Voor 18% gewijzigd door Verwijderd op 16-06-2009 19:42 ]


Acties:
  • 0 Henk 'm!

  • Tubby
  • Registratie: Juni 2001
  • Laatst online: 18-09 23:54

Tubby

or not to be

Het wordt wel spannend als je projectnaam wijzigd :)

Verder is je query SQL technisch correct (tenminste, onder oracle en Microsoft SQL zou dit werken)

[ Voor 49% gewijzigd door Tubby op 16-06-2009 19:41 ]

tubby.nl - Artes Moriendi - q1 - bf1942 - WoT - pubg - LinkedIN


Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 19-09 16:54

DexterDee

I doubt, therefore I might be

Ten eerste moet de inner join na de FROM en vóór de WHERE. Ten tweede, als je met joins werkt, dan is het goed om meteen tabel aliasen aan te leren. Zo kom je later niet voor verrassingen te staan als je in beide tabellen hetzelfde veld gebruikt en hoef je ook niet een lange tabelnaam voor het veld te zetten.

Een duw in de goede richting dan:

SQL:
1
2
3
4
5
6
7
8
9
SELECT 
     p.uren,
     w.werknemer
FROM project p
INNER JOIN
     werknemer w ON w.ID = p.werknemerID
WHERE
     p.projectnaam = "$project" 
AND p.uren IS NOT NULL


Dit is nog niet precies wat je aan overzicht wil hebben, maar zoals je zelf zegt, een duw in de goede richting ;)

[ Voor 1% gewijzigd door DexterDee op 16-06-2009 19:47 . Reden: sql in code blok ]

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

  • Tubby
  • Registratie: Juni 2001
  • Laatst online: 18-09 23:54

Tubby

or not to be

Arg, dan merk je pas hoeveel je iteratief werkt bij het opbouwen van een query ;)

tubby.nl - Artes Moriendi - q1 - bf1942 - WoT - pubg - LinkedIN


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Nu online
Waarom heet je tabel projecten als er uren in staan? :+ Tabel projecten verwacht ik dat projecten in staan, tabel waar uren in staan verwacht ik dat uren heet. Projectnaam zou ik dan afsplitsen naar een aparte tabel, zodat je bv een werknemer aan een project kan koppelen (rechten, is ie niet aan dat project gekoppeld kan die er geen uren voor registreren, je weet welke werknemers aan een project (behoren) te werken, voor in het overzicht, je ziet meteen wie niks doet e.d.)

Hoe kun je trouwens in de projecten tabel de uren kolom een NULL waarde geven (uren IS NOT NULL)? Vind ik nogal knap, het opslaan van de uren dat je eraan hebt gewerkt, is toch de hele rede voor het bestaan van de tabel, dat je daar dan een NULL in kan zetten, vind ik nogal raar.

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
so give me some slack
Je hebt de uren wel opgeslagen in een kolom van het datatype TIME? En de datum heb je in een kolom van het type DATE staan? Of gebruik/misbruik je voor alle soorten data het datatype VARCHAR? Je zou niet de eerste zijn, noch de laatste. Gebruik altijd de best passende datatypes, die hebben ze niet voor niets uitgevonden, het maakt jouw werk eenvoudiger.

Ps. Ga MySQL wel eerst fatsoenlijk configureren, anders is 2009-02-30 zomaar een geldige datum... Zie PHPFreakz voor nadere uitleg.
Pagina: 1