DISTINCT in query werkt niet
In onderstaande query werkt de optie DISTINCT niet. Wat doe ik hierin niet goed?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
DISTINCT d.iid AS relatie,
d.datum AS datum,
n.givn AS voornaam,
n.spfx AS tussenvoeg,
n.surn AS achternaam,
i.begi_datec AS geboortedatum,
i.begi_plac AS geboorteplaats
FROM
ove_leden_detail AS d
JOIN
ftphp__indi_name AS n
ON
n.iid = d.iid
JOIN
ftphp__indi As i
ON
i.iid = d.iid
ORDER BY
n.surn
DISTINCT d.iid AS relatie,
d.datum AS datum,
n.givn AS voornaam,
n.spfx AS tussenvoeg,
n.surn AS achternaam,
i.begi_datec AS geboortedatum,
i.begi_plac AS geboorteplaats
FROM
ove_leden_detail AS d
JOIN
ftphp__indi_name AS n
ON
n.iid = d.iid
JOIN
ftphp__indi As i
ON
i.iid = d.iid
ORDER BY
n.surn
George
Wat krijg je als foutmelding?
Ik krijg geen foutmelding maar dubbele records op basis van het veld <iid> worden toch getoond
DISTINCT moet je lezen als DISTINCT ROW, dus het resultaat wat je krijgt klopt wel, maar dat is niet hetgeen je wilt.
Ik heb een oplossing gevonden middels een GROUP BY op het veld d.iid
Dat is niet helemaal failsafe, tenminste niet als je bv iemands eerste relatie wilt hebben.
Met deze query is het de bedoeling dat ik een lijst toon met de laatste 100 namen van personen die door de gebruiker gezocht zijn.
Op dit moment is de query:
Code (php)
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
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
SELECT
DISTINCT d.iid AS relatie,
d.datum AS datum,
n.givn AS voornaam,
n.spfx AS tussenvoeg,
n.surn AS achternaam,
i.begi_datec AS geboortedatum,
i.begi_plac AS geboorteplaats,
i.end_datec AS overlijdensdatum,
i.end_plac As overlijdensplaats
FROM
ove_leden_detail AS d
JOIN
ftphp__indi_name AS n
ON
n.iid = d.iid
JOIN
ftphp__indi As i
ON
i.iid = d.iid
WHERE
d.lid = '$nLidId'
GROUP BY
d.iid
ORDER BY
d.datum DESC,n.surn, n.givn,n.iid
LIMIT 0,100
DISTINCT d.iid AS relatie,
d.datum AS datum,
n.givn AS voornaam,
n.spfx AS tussenvoeg,
n.surn AS achternaam,
i.begi_datec AS geboortedatum,
i.begi_plac AS geboorteplaats,
i.end_datec AS overlijdensdatum,
i.end_plac As overlijdensplaats
FROM
ove_leden_detail AS d
JOIN
ftphp__indi_name AS n
ON
n.iid = d.iid
JOIN
ftphp__indi As i
ON
i.iid = d.iid
WHERE
d.lid = '$nLidId'
GROUP BY
d.iid
ORDER BY
d.datum DESC,n.surn, n.givn,n.iid
LIMIT 0,100
George
Code (php)
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
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
SELECT
d.iid AS relatie,
MAX(d.datum) AS datum,
n.givn AS voornaam,
n.spfx AS tussenvoeg,
n.surn AS achternaam,
i.begi_datec AS geboortedatum,
i.begi_plac AS geboorteplaats,
i.end_datec AS overlijdensdatum,
i.end_plac As overlijdensplaats
FROM
ove_leden_detail AS d
JOIN
ftphp__indi_name AS n
ON
n.iid = d.iid
JOIN
ftphp__indi As i
ON
i.iid = d.iid
WHERE
d.lid = '$nLidId'
GROUP BY
d.iid HAVING d.datum = datum
ORDER BY
datum DESC,n.surn, n.givn,n.iid
LIMIT 0,100
d.iid AS relatie,
MAX(d.datum) AS datum,
n.givn AS voornaam,
n.spfx AS tussenvoeg,
n.surn AS achternaam,
i.begi_datec AS geboortedatum,
i.begi_plac AS geboorteplaats,
i.end_datec AS overlijdensdatum,
i.end_plac As overlijdensplaats
FROM
ove_leden_detail AS d
JOIN
ftphp__indi_name AS n
ON
n.iid = d.iid
JOIN
ftphp__indi As i
ON
i.iid = d.iid
WHERE
d.lid = '$nLidId'
GROUP BY
d.iid HAVING d.datum = datum
ORDER BY
datum DESC,n.surn, n.givn,n.iid
LIMIT 0,100
Zo weet je zeker dat je de laatste datum hebt.
Thnx