login  Naam:   Wachtwoord: 
Registreer je!
 Forum

SQL Fout met COUNT() (Opgelost)

Offline pim1991 - 10/02/2010 11:18
Avatar van pim1991PHP interesse Hallo,

Ik heb de volgende mySQL query:
  1. $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:

  1. 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?

Alvast bedankt!

4 antwoorden

Gesponsorde links
Offline Ontani - 10/02/2010 11:54
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Als je een count doet zal je een group by moeten doen op al je andere velden.
Offline pim1991 - 10/02/2010 12:22
Avatar van pim1991 PHP interesse 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, ... ?
Offline Richard - 10/02/2010 13:15 (laatste wijziging 10/02/2010 13:16)
Avatar van Richard 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.

  1. SELECT vbo.ID AS vboid,
  2. COUNT(pnd.ID) AS num,
  3. vbo.Verblijfsobjectidentificatie,
  4. vbo.Gebruiksdoel_verblijfsobject,
  5. pnd.ID AS PID,
  6. pnd.Pandidentificatie,
  7. pnd.Pandstatus,
  8. pnd.heeft_aanduiding_van,
  9. pnd.is_verbonden_met,
  10. nan.ID,
  11. nan.Huisnummer,
  12. nan.Huisnummertoevoeging,
  13. nan.Huisletter,
  14. nan.Postcode,
  15. opr.Naam_openbare_ruimte,
  16. wp1.Woonplaatsnaam AS woonplaats1
  17. FROM verblijfsobject vbo
  18. RIGHT JOIN pand pnd
  19. ON vbo.Pandrelatering = pnd.ID
  20. LEFT JOIN nummeraanduiding nan
  21. ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID
  22. LEFT JOIN openbareruimte opr
  23. ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID
  24. LEFT JOIN woonplaats wp1
  25. ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID
  26. WHERE pnd.toevoeger IN (
  27. SELECT persoon.ID
  28. FROM persoon
  29. JOIN organisatie
  30. ON persoon.organisatie = organisatie.ID
  31. WHERE persoon . ID = '%1$s'
  32. ) AND pnd.Datum_einde_geldigheid_pandgegevens IS NULL
  33. %2$s
  34.  
  35. UNION
  36.  
  37. SELECT vbo.ID AS vboid,
  38. vbo.Verblijfsobjectidentificatie,
  39. vbo.Gebruiksdoel_verblijfsobject,
  40. pnd.ID AS PID,
  41. pnd.Pandidentificatie,
  42. pnd.Pandstatus,
  43. pnd.heeft_aanduiding_van,
  44. pnd.is_verbonden_met,
  45. nan.ID,
  46. nan.Huisnummer,
  47. nan.Huisnummertoevoeging,
  48. nan.Huisletter,
  49. nan.Postcode,
  50. opr.Naam_openbare_ruimte,
  51. wp1.Woonplaatsnaam AS woonplaats1
  52. FROM verblijfsobject vbo
  53. RIGHT JOIN pand pnd
  54. ON vbo.Pandrelatering = pnd.ID
  55. LEFT JOIN nummeraanduiding nan
  56. ON vbo.Aanduiding_hoofdadres_verblijfsobject = nan.ID
  57. LEFT JOIN openbareruimte opr
  58. ON nan.Identificatiecode_bijbehorende_openbare_ruimte = opr.ID
  59. LEFT JOIN woonplaats wp1
  60. ON opr.Identificatiecode_bijbehorende_woonplaats = wp1.ID
  61. WHERE pnd.toevoeger IN (
  62. SELECT persoon.ID
  63. FROM persoon
  64. JOIN organisatie
  65. ON persoon.organisatie = organisatie.ID
  66. WHERE persoon . ID = '%1$s'
  67. ) AND pnd.Datum_einde_geldigheid_pandgegevens IS NULL
  68. %2$s


Overigens zie ik geen reden voor de UNION. Maar dat is een puzzel voor de lezer.
Offline pim1991 - 10/02/2010 13:20
Avatar van pim1991 PHP interesse 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!

Toch bedankt voor jullie aangeboden hulp!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.269s