$query_panden = sprintf("SELECT vbo.ID AS vboid, COUNT(pnd.ID) AS num, vbo.Verblijfsobjectidentificatie, vbo.Gebruiksdoel_verblijfsobject, pnd.ID AS PID, pnd.Pandidentificatie, pnd.Pandstatus, pnd.heeft_aanduiding_van, pnd.is_verbonden_met, nan.ID, nan.Huisnummer, nan.Huisnummertoevoeging, nan.Huisletter, nan.Postcode, opr.Naam_openbare_ruimte, wp1.Woonplaatsnaam AS woonplaats1 FROM verblijfsobject vbo RIGHT JOIN pand pnd ON vbo.Pandrelatering = pnd.ID LEFT JOIN nummeraanduiding nan ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID LEFT JOIN openbareruimte opr ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID LEFT JOIN woonplaats wp1 ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID WHERE pnd.toevoeger IN (SELECT persoon . ID FROM persoon, organisatie WHERE persoon . organisatie = organisatie . ID AND organisatie . ID = (SELECT persoon . organisatie FROM persoon WHERE persoon . ID = '%s')) AND pnd.Datum_einde_geldigheid_pandgegevens IS NULL %s UNION SELECT vbo.ID AS vboid, vbo.Verblijfsobjectidentificatie, vbo.Gebruiksdoel_verblijfsobject, pnd.ID AS PID, pnd.Pandidentificatie, pnd.Pandstatus, pnd.heeft_aanduiding_van, pnd.is_verbonden_met, nan.ID, nan.Huisnummer, nan.Huisnummertoevoeging, nan.Huisletter, nan.Postcode, opr.Naam_openbare_ruimte, wp1.Woonplaatsnaam AS woonplaats1 FROM verblijfsobject vbo RIGHT JOIN pand pnd ON vbo.Pandrelatering = pnd.ID LEFT JOIN nummeraanduiding nan ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID LEFT JOIN openbareruimte opr ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID LEFT JOIN woonplaats wp1 ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID WHERE pnd.toevoeger IN (SELECT persoon . ID FROM persoon, organisatie WHERE persoon . organisatie = organisatie . ID AND organisatie . ID = (SELECT persoon . organisatie FROM persoon WHERE persoon . ID = '%s')) AND pnd.Datum_einde_geldigheid_pandgegevens IS NULL %s GROUP BY 4 ORDER BY 13 ASC", $zelfnr, $vraag1, $zelfnr, $vraag1);
$query_panden=sprintf("SELECT vbo.ID AS vboid, COUNT(pnd.ID) AS num, vbo.Verblijfsobjectidentificatie, vbo.Gebruiksdoel_verblijfsobject, pnd.ID AS PID, pnd.Pandidentificatie, pnd.Pandstatus, pnd.heeft_aanduiding_van, pnd.is_verbonden_met, nan.ID, nan.Huisnummer, nan.Huisnummertoevoeging, nan.Huisletter, nan.Postcode, opr.Naam_openbare_ruimte, wp1.Woonplaatsnaam AS woonplaats1 FROM verblijfsobject vbo RIGHT JOIN pand pnd ON vbo.Pandrelatering = pnd.ID LEFT JOIN nummeraanduiding nan ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID LEFT JOIN openbareruimte opr ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID LEFT JOIN woonplaats wp1 ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID WHERE pnd.toevoeger IN (SELECT persoon . ID FROM persoon, organisatie WHERE persoon . organisatie = organisatie . ID AND organisatie . ID = (SELECT persoon . organisatie FROM persoon WHERE persoon . ID = '%s')) AND pnd.Datum_einde_geldigheid_pandgegevens IS NULL %s UNION SELECT vbo.ID AS vboid, vbo.Verblijfsobjectidentificatie, vbo.Gebruiksdoel_verblijfsobject, pnd.ID AS PID, pnd.Pandidentificatie, pnd.Pandstatus, pnd.heeft_aanduiding_van, pnd.is_verbonden_met, nan.ID, nan.Huisnummer, nan.Huisnummertoevoeging, nan.Huisletter, nan.Postcode, opr.Naam_openbare_ruimte, wp1.Woonplaatsnaam AS woonplaats1 FROM verblijfsobject vbo RIGHT JOIN pand pnd ON vbo.Pandrelatering = pnd.ID LEFT JOIN nummeraanduiding nan ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID LEFT JOIN openbareruimte opr ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID LEFT JOIN woonplaats wp1 ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID WHERE pnd.toevoeger IN (SELECT persoon . ID FROM persoon, organisatie WHERE persoon . organisatie = organisatie . ID AND organisatie . ID = (SELECT persoon . organisatie FROM persoon WHERE persoon . ID = '%s')) AND pnd.Datum_einde_geldigheid_pandgegevens IS NULL %s GROUP BY 4 ORDER BY 13 ASC",$zelfnr,$vraag1,$zelfnr,$vraag1);
Het is inderdaad nogal een rotzooi maar dit is ooit ontworpen door een andere php programmeur.
Nu wil ik pagina's gaan toevoegen en wil ik de rijen tellen met COUNT() wat alles behalve lukt. Ik krijg de volgende fout:
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/ofelon/domains/gripopbag.nl/public_html/pages/gebeurtenis/pand.php on line 364
Warning:mysql_result(): supplied argument is not a valid MySQL result resource in /home/ofelon/domains/gripopbag.nl/public_html/pages/gebeurtenis/pand.php on line 364
Zonder COUNT() toe te voegen aan de query werkt deze gewoon.
Wie weet wat ik fout doe of hoe ik Count moet gebruiken met al die joins?
Dat is raar... Ik heb nog meer van zo'n queries die wel gewoon werken zonder group by o.i.d.
Dus ik moet achteraan het volgende zetten: group by vbo.ID, vbo.verblijfsobject, ... ?
Richard - 10/02/2010 13:15 (laatste wijziging 10/02/2010 13:16)
Crew algemeen
Misschien moet je je query eens netjes uitschrijven, dit is niet te volgen.
En verder: een aggregaatfunctie is *NIET* te gebruiken zonder geldige GROUP BY. Deze query klopt gewoon niet, ga je sql_mode instellingen eens goed instellen en kijk daarna nog maar eens.
Daarnaast, je hebt niet een gelijk aantal kolommen in je beide nodes van je UNION. Dat komt door de COUNT() die je hebt toegevoegd.
Dit zou je allemaal veel makkelijker opvallen als je je query netjes uit zou schrijven. Begin daar eens mee.
SELECT vbo.ID AS vboid,
COUNT(pnd.ID) AS num,
vbo.Verblijfsobjectidentificatie,
vbo.Gebruiksdoel_verblijfsobject,
pnd.ID AS PID,
pnd.Pandidentificatie,
pnd.Pandstatus,
pnd.heeft_aanduiding_van,
pnd.is_verbonden_met,
nan.ID,
nan.Huisnummer,
nan.Huisnummertoevoeging,
nan.Huisletter,
nan.Postcode,
opr.Naam_openbare_ruimte,
wp1.Woonplaatsnaam AS woonplaats1
FROM verblijfsobject vbo
RIGHT JOIN pand pnd
ON vbo.Pandrelatering = pnd.ID
LEFT JOIN nummeraanduiding nan
ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID
LEFT JOIN openbareruimte opr
ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID
LEFT JOIN woonplaats wp1
ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID
WHERE pnd.toevoeger IN (
SELECT persoon.ID
FROM persoon
JOIN organisatie
ON persoon.organisatie = organisatie.ID
WHERE persoon . ID = '%1$s'
) AND pnd.Datum_einde_geldigheid_pandgegevens IS NULL
%2$s
UNION
SELECT vbo.ID AS vboid,
vbo.Verblijfsobjectidentificatie,
vbo.Gebruiksdoel_verblijfsobject,
pnd.ID AS PID,
pnd.Pandidentificatie,
pnd.Pandstatus,
pnd.heeft_aanduiding_van,
pnd.is_verbonden_met,
nan.ID,
nan.Huisnummer,
nan.Huisnummertoevoeging,
nan.Huisletter,
nan.Postcode,
opr.Naam_openbare_ruimte,
wp1.Woonplaatsnaam AS woonplaats1
FROM verblijfsobject vbo
RIGHT JOIN pand pnd
ON vbo.Pandrelatering = pnd.ID
LEFT JOIN nummeraanduiding nan
ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID
LEFT JOIN openbareruimte opr
ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID
LEFT JOIN woonplaats wp1
ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID
WHERE pnd.toevoeger IN (
SELECT persoon.ID
FROM persoon
JOIN organisatie
ON persoon.organisatie = organisatie.ID
WHERE persoon . ID = '%1$s'
) AND pnd.Datum_einde_geldigheid_pandgegevens IS NULL
%2$s
SELECT vbo.ID AS vboid,
COUNT(pnd.ID)AS num,
vbo.Verblijfsobjectidentificatie,
vbo.Gebruiksdoel_verblijfsobject,
pnd.ID AS PID,
pnd.Pandidentificatie,
pnd.Pandstatus,
pnd.heeft_aanduiding_van,
pnd.is_verbonden_met,
nan.ID,
nan.Huisnummer,
nan.Huisnummertoevoeging,
nan.Huisletter,
nan.Postcode,
opr.Naam_openbare_ruimte,
wp1.Woonplaatsnaam AS woonplaats1
FROM verblijfsobject vbo
RIGHTJOIN pand pnd
ON vbo.Pandrelatering = pnd.ID
LEFTJOIN nummeraanduiding nan
ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID
LEFTJOIN openbareruimte opr
ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID
LEFTJOIN woonplaats wp1
ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID
Queries heb ik zelf niet gemaakt en heb de tijd er niet voor om die helemaal te gaan checken. Ze werken dus dan is het goed (tijd = geld ... zelf wat ik liever opnieuw begonnen maar klant = koning).
Heb het nu opgelost met mysql_num_rows. Ook weer niet de beste oplossing maar het doet wat het moet doen!