[PHP/MySQL] count(*) icm met joins

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mr-Leo
  • Registratie: Oktober 2001
  • Laatst online: 07-04 22:56
Ik heb deze (goed werkende) query met 2 joins:

code:
1
2
3
4
SELECT grondstof.*, gr_groep.gr_groep, herkomst.herkomst
FROM grondstof 
LEFT JOIN gr_groep ON gr_groep.gr_groep_id = grondstof.gr_groep_id 
LEFT JOIN herkomst ON herkomst.herkomst_id = grondstof.herkomst_id ORDER BY grondstof


nu is er ook nog een table ri_maximum waar een grondstof_id meerdere keren kan voorkomen. nu wil ik graag dus nog een join die telt (bijvoorbeeld met count(*)) hoevaak een grondstof_id voorkomt..

bijvoorbeeld met
code:
1
SELECT count(*) FROM ri_maximum where ri_maximum.grondstof_id = grondstof.grondstof_id


hierna genereer ik met while {} een lijst die er zo uit moet zien:

grondstof, gr_groep, herkomst, aantal
bla, groep 1, europa, 4
bla, groep 2, europa, 0
bla, groep 3, europa, 2
bla, groep 1, europa, 1

------


HOE doe ik dat? ik weet wel hoe ik de query_result moet krijgen voor alle andere velden met $record->herkomst ed.. maar hoe krijg ik dat voor de count(*)

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

SQL:
1
2
3
4
5
A table reference can be aliased using tbl_name [AS] alias_name: 
mysql> SELECT t1.name, t2.salary FROM employee AS t1, info AS t2
    ->     WHERE t1.name = t2.name;
mysql> SELECT t1.name, t2.salary FROM employee t1, info t2
    ->     WHERE t1.name = t2.name;
Zie Mysql Doc

Misschien niet direkt een antwoord op je vraag, maar waarom JOIN gebruiken ?
edit:
ORDER BY grondstof.???

[ Voor 9% gewijzigd door glashio op 19-05-2004 14:14 . Reden: Opmaak ]

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • Mr-Leo
  • Registratie: Oktober 2001
  • Laatst online: 07-04 22:56
idd helemaal geen antwoord... ik weet hoe ik joins moet gebruiken.. en dat moet ook want ik wil ook alle gegevens uit de grondstof tabel.. en dus weer het aantal rows uit een andere tabel.

Acties:
  • 0 Henk 'm!

  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

Euh - select count(*) as aantal ? Je kan dan $record -> aantal gebruiken denk ik, analoog aan de andere kolommen.

[ Voor 55% gewijzigd door raoulduke op 19-05-2004 14:28 ]

Remember, if you have any trouble you can always send a telegram to the Right People.


Acties:
  • 0 Henk 'm!

  • Mr-Leo
  • Registratie: Oktober 2001
  • Laatst online: 07-04 22:56
hmm jah die SELECT count(*) AS teller FROM tabel WHERE row=1 werkt!

alleen krijg ik het niet elkaar hem in mijn query (zie 1e post) te bouwen...

ZO werkt het dus niet:

code:
1
2
3
4
5
6
SELECT grondstof.*, gr_groep.gr_groep, herkomst.herkomst
FROM grondstof 
SELECT count(*) AS teller FROM ri_maximum WHERE grondstof.grondstof_id
LEFT JOIN gr_groep ON gr_groep.gr_groep_id = grondstof.gr_groep_id 
LEFT JOIN herkomst ON herkomst.herkomst_id = grondstof.herkomst_id
LEFT JOIN ri_maximum ON ri_maximum.grondstof_id = grondstof.grondstof_id

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
code:
1
2
3
4
5
6
SELECT grondstof.*, gr_groep.gr_groep, herkomst.herkomst, count(ri_maximum.grondstof_id) AS teller
FROM grondstof
LEFT JOIN gr_groep ON gr_groep.gr_groep_id = grondstof.gr_groep_id 
LEFT JOIN herkomst ON herkomst.herkomst_id = grondstof.herkomst_id
LEFT JOIN ri_maximum ON ri_maximum.grondstof_id = grondstof.grondstof_id
GROUP BY grondstof.grondstof_id
Lijkt me als ik het zo lees.


edit:
Ff de fout eruit gehaald.

[ Voor 8% gewijzigd door Shadowman op 19-05-2004 15:53 ]


Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
  `grondstof`.*, 
  `gr_groep`.`gr_groep`,
  `herkomst`.`herkomst`,
  COUNT(`ri_maximum`.`grondstof_id`) AS `teller`
FROM
  `ri_maximum`,
  `gr_groep`,
  `herkomst`
  `grondstof`
WHERE
  `gr_groep`.`gr_groep_id` = `grondstof`.`gr_groep_id`
  AND
  `herkomst`.`herkomst_id` = `grondstof`.`herkomst_id`
  AND
  `ri_maximum`.`grondstof_id` = `grondstof`.`grondstof_id`
GROUP BY `grondstof`.`grondstof_id`
Kan dit ook Shadowman i.v.m. GROUP BY ?
Mr-Leo schreef op 19 mei 2004 @ 14:25:
want ik wil ook alle gegevens uit de grondstof tabel
Ok, dit levert geen probleem op met deze methode, ORDER BY niet meer nodig ?
edit:
`grondstof` bij FROM toegevoegd

[ Voor 6% gewijzigd door glashio op 19-05-2004 15:44 . Reden: 2 Quotjes ]

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • Mr-Leo
  • Registratie: Oktober 2001
  • Laatst online: 07-04 22:56
Shadowman schreef op 19 mei 2004 @ 15:02:
code:
1
2
3
4
5
6
SELECT grondstof.*, gr_groep.gr_groep, herkomst.herkomst, count(ri_maximum.grondstof_id) AS teller
FROM ri_maximum 
LEFT JOIN gr_groep ON gr_groep.gr_groep_id = grondstof.gr_groep_id 
LEFT JOIN herkomst ON herkomst.herkomst_id = grondstof.herkomst_id
LEFT JOIN ri_maximum ON ri_maximum.grondstof_id = grondstof.grondstof_id
GROUP BY grondstof.grondstof_id
Lijkt me als ik het zo lees.
MySQL retourneerde: Not unique table/alias: 'ri_maximum'

Acties:
  • 0 Henk 'm!

  • Mr-Leo
  • Registratie: Oktober 2001
  • Laatst online: 07-04 22:56
glashio schreef op 19 mei 2004 @ 15:33:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
  `grondstof`.*, 
  `gr_groep`.`gr_groep`,
  `herkomst`.`herkomst`,
  COUNT(`ri_maximum`.`grondstof_id`) AS `teller`
FROM
  `ri_maximum`,
  `gr_groep`,
  `herkomst`
WHERE
  `gr_groep`.`gr_groep_id` = `grondstof`.`gr_groep_id`
  AND
  `herkomst`.`herkomst_id` = `grondstof`.`herkomst_id`
  AND
  `ri_maximum`.`grondstof_id` = `grondstof`.`grondstof_id`
GROUP BY `grondstof`.`grondstof_id`
Kan dit ook Shadowman i.v.m. GROUP BY ?

[...]
Ok, dit levert geen probleem op met deze methode, ORDER BY niet meer nodig ?
en hier krijg ik de melding: MySQL retourneerde: Unknown table 'grondstof'

(en jah, de tabel grondstof is goed geschreven en bestaat ook..)

Acties:
  • 0 Henk 'm!

  • Mr-Leo
  • Registratie: Oktober 2001
  • Laatst online: 07-04 22:56
YEAH!! ik heb hem!!

het truukje van Shadowman werkte toch, na wijzigen van FROM ri_maximum in FROM grondstof.

Thx!

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

Mr-Leo schreef op 19 mei 2004 @ 15:38:
MySQL retourneerde: Not unique table/alias: 'ri_maximum'
Mr-Leo schreef op 19 mei 2004 @ 15:42:
en hier krijg ik de melding: MySQL retourneerde: Unknown table 'grondstof'
(en jah, de tabel grondstof is goed geschreven en bestaat ook..)
Mag ik vragen wat je met me 1ste link (Mysql Doc) gedaan heb ?
Of heb je zoiets van... Documentatie.. Brrrrr...

Beetje zelfinitiatief wordt zeer gewaardeerd op GoT

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • Mr-Leo
  • Registratie: Oktober 2001
  • Laatst online: 07-04 22:56
ik ben een halve dag bezig geweest met doorlezen van documentatie op verschillende sites... zo heb ik ook het joinen uitgevonden... alleen ik kon niks vinden over een combinatie van joins en de count functie van mysql...

maar inmiddels is het al gelukt!

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21-09 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Mr-Leo:
Kan je als je voortaan nog wat wil toevoegen aan een post de Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif gebruiken? Het lijst vrij vervelend om replies van dezelfde persoon achter elkaar te lezen. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Mr-Leo
  • Registratie: Oktober 2001
  • Laatst online: 07-04 22:56
ohwjah, als je daar blij van wordt.. wil het ook nog wel aanpassen hoor als iemand dan de overgebleven lege post verwijderd :)

offtopic: Mr-Leo, Geregistreerd op Thursday 25 October 2001 22:16
Pagina: 1