De relatie tussen de contacten en historiek is de historiek.contact_id die gelijk is aan de contacten.id tabel. Maar er is geen relatie tussen de contacten en taken tabel of tussen de historiek en taken tabel. Toch zou ik deze in de query willen opnemen omdat ik van de taken het id zou nodig hebben.
De query zou er als volgt moeten uitzien:
SELECT
h.actiedatum,
h.contact_id,
h.historiek,
h.id,
h.type,
c.bedrijfsnaam,
c.voornaam,
c.achternaam,
t.id
FROM
historiek h
JOIN
contacten c
ON
h.contact_id = c.id
JOIN
taken t
ON
???
WHERE
actiedatum <= CURRENT_DATE AND afgewerkt <> 'ja' AND actiedatum <> '0000-00-00' AND naam = '". $_SESSION['username'] ."'
Maar wat moet op de ??? komen? Of heb ik die ON niet altijd nodig?
De join condition ON is niet nodig, maar krijg je dan wel je gewenste resultaat?
Iedere rij uit taken zal dan gekoppeld worden aan iedere rij van contacten en historiek.
--
-- Tabelstructuur voor tabel `historiek`
--
CREATE TABLE IF NOT EXISTS `historiek` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`datum` varchar(50) NOT NULL,
`naam` varchar(100) NOT NULL,
`historiek` longtext NOT NULL,
`contact_id` varchar(5) NOT NULL,
`file` varchar(100) NOT NULL,
`file_ext` varchar(4) NOT NULL,
`actiedatum` date DEFAULT NULL,
`afgewerkt` varchar(10) NOT NULL,
`type` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=466 ;
--
-- Tabelstructuur voor tabel `contacten`
--
CREATE TABLE IF NOT EXISTS `contacten` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`terugbeldatum_vtw` varchar(150) NOT NULL,
`terugbeluur_vtw` varchar(150) NOT NULL,
`datum_ingave` varchar(50) NOT NULL,
`datum_gewijzigd` varchar(50) NOT NULL,
`datum_klant` varchar(50) NOT NULL,
`maand_klant` varchar(20) NOT NULL,
`bedrijfsnaam` varchar(100) NOT NULL,
`achternaam` varchar(100) NOT NULL,
`voornaam` varchar(50) NOT NULL,
`adres` varchar(100) NOT NULL,
`postcode` varchar(100) NOT NULL,
`gemeente` varchar(20000) NOT NULL,
`lat` float NOT NULL,
`lng` float NOT NULL,
`cont_status` varchar(20) NOT NULL,
`afsp_status` varchar(20) NOT NULL,
`mobiel` varchar(50) NOT NULL,
`telefoon` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
`functie` varchar(150) NOT NULL,
`website` varchar(100) NOT NULL,
`opmerkingen` varchar(20000) NOT NULL,
`opmerkingen_klant` varchar(20000) NOT NULL,
`vertegenwoordiger` varchar(50) NOT NULL,
`prospecteur` varchar(50) NOT NULL,
`terugbeldatum` varchar(50) NOT NULL,
`convert_terugbeldatum` varchar(50) NOT NULL,
`terugbeluur` varchar(20) NOT NULL,
`link` varchar(150) NOT NULL,
`subaccount` varchar(10) NOT NULL,
`vip` varchar(10) NOT NULL,
`sectornaam` varchar(350) NOT NULL,
`fact_naam` varchar(255) NOT NULL,
`fact_tav` varchar(255) NOT NULL,
`fact_venvorm` varchar(20) NOT NULL,
`fact_adres` varchar(255) NOT NULL,
`fact_postcode` varchar(20) NOT NULL,
`fact_gemeente` varchar(100) NOT NULL,
`fact_btwnr` varchar(50) NOT NULL,
`fact_email` varchar(255) NOT NULL,
`per_voorschot` varchar(10) NOT NULL,
`per_tussentijds` varchar(10) NOT NULL,
`per_slot` varchar(10) NOT NULL,
`photo` varchar(255) NOT NULL,
`uitdaging` longtext NOT NULL,
`bucket` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1205 ;
--
-- Tabelstructuur voor tabel `taken`
--
CREATE TABLE IF NOT EXISTS `taken` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`project_id` varchar(50) NOT NULL,
`subproject_id` varchar(50) NOT NULL,
`toewijzen_id` varchar(50) NOT NULL,
`taak_naam` varchar(255) NOT NULL,
`status` varchar(100) NOT NULL,
`omschrijving` longtext NOT NULL,
`ges_tijd` varchar(100) NOT NULL,
`ges_budget` varchar(100) NOT NULL,
`wer_tijd` varchar(100) NOT NULL,
`wer_budget` varchar(100) NOT NULL,
`ges_startdatum` varchar(50) NOT NULL,
`wer_startdatum` varchar(50) NOT NULL,
`ges_einddatum` varchar(50) NOT NULL,
`wer_einddatum` varchar(50) NOT NULL,
`type` varchar(50) NOT NULL,
`regie` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=79 ;
Er ontbreekt dan, denk ik zo, in je query nog een bruggetje: je moet de tabel met projecten via de project_id relateren aan de contacten, anders zie je niet voor wie je wat doet.
>>
Dat is ook zo. Maar die heb ik in deze query niet nodig. Of zie ik dit hier verkeerd?
Ja, je hebt via de projecten tabel een indirecte relatie tussen taken en contacten. Dus moet je die tabel gebruiken ook al gebruik je daar verder niets uit.
Nee inderdaad. Datum en tijden horen niet in een varchar maar dit is nog het oude model dat ik volledig aan het herwerken ben. Vandaar zo af en toe mijn vragen hier op dit forum.
Dus - SanThe - jouw punt is terecht maar is geen oplossing op mijn vraag hier ;-)
[size=xsmall]Toevoeging op 13/01/2015 17:34:07:[/size]
@Ger: moet ik dan een paar JOIN gebruiken in die query? Wat moet ik dan telkens bij de ON zetten? Dit is mij niet duidelijk. Zie hieronder tot waar ik het zie. De vraagtekens blijven het probleem:
[code]
SELECT
h.actiedatum,
h.contact_id,
h.historiek,
h.id,
h.type,
c.bedrijfsnaam,
c.voornaam,
c.achternaam,
t.id
FROM
historiek h
JOIN
contacten c
ON
h.contact_id = c.id
JOIN
taken t
ON
???
JOIN
projecten p
ON
???
WHERE
actiedatum <= CURRENT_DATE AND afgewerkt <> 'ja' AND actiedatum <> '0000-00-00' AND naam = '". $_SESSION['username'] ."'