[mysql] probleem met query

Pagina: 1
Acties:

  • angl2k
  • Registratie: Maart 2001
  • Laatst online: 29-04 10:53
ik zit al uren te knoeien op een query om uit 1 tabel het aantal tactieken per level te krijgen, samen met de id,header en username van de laatste tactiek (voor dat level).

structuur van de tabel:
code:
1
2
3
4
5
6
7
8
9
mysql> select id,levelname,username,header from tactics;
+----+--------------+----------+-----------------+
| id | levelname    | username | header     |
+----+--------------+----------+-----------------+
|  1 | forge      | arny     | swat attack     |
|  2 | forge      | angl2k   | swat attack2    |
|  3 | trainstation | angl2k   | Terro camp plan |
+----+--------------+----------+-----------------+
3 rows in set (0.06 sec)

hoe hoger de ID hoe recenter de tactiek is.

mijn voorlopige query:
code:
1
select levelname,count(*) as count,max(id) as id,header,username from tactics group by levelname

dit is wat ik terugkrijg:
code:
1
2
3
4
5
6
7
8
mysql> select levelname,count(*) as count,max(id) as id,header,username from tactics group by levelname;
+--------------+-------+------+-----------------+----------+
| levelname    | count | id   | header      | username |
+--------------+-------+------+-----------------+----------+
| forge   |     2 |    2 | swat attack     | arny     |
| trainstation |     1 |    3 | Terro camp plan | angl2k   |
+--------------+-------+------+-----------------+----------+
2 rows in set (0.06 sec)

het probleem is nu, dat de header en username van het resultaat niet overeenkomt met de betreffende ID. de laatste tactiek van "forge" moet dus zijn id=2 met bijbehorende header "swat attack2" en username "angl2k"

wie kan mij verder helpen want ik kom er echt niet uit |:(

ps let niet op de veldnamen en waarden dat komt van mn clan :)

Verwijderd

kan je het niet gewoon met 2 queries doen?

en gebruik je PHP? zoja:

mysql_query(("select id,levelname,username,header from tactics");

&

mysql_num_rows(mysql_query(("select id,levelname,username,header from tactics"));



zou je de verschillende resultaten opleveren en vervolgens het aantal///

  • angl2k
  • Registratie: Maart 2001
  • Laatst online: 29-04 10:53
het zal best met 2 queries kunnen, maar ik wil het in 1 query doen (wat volgens mij mogelijk is) >:)

edit:

ja, ik gebruik php

  • angl2k
  • Registratie: Maart 2001
  • Laatst online: 29-04 10:53
niemand :?

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
Op maandag 03 december 2001 21:50 schreef angl2k het volgende:
niemand :?
waarom perse in 1 query
als het in 2 veel handiger is???

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
count(levelname) :?

Verwijderd

Moet je met een subquery doen, dus je zegt dat het id gelijk is aan het grootste id (dus de laatste)

voorbeeld:
code:
1
2
3
having id = (select max(id) from
         from blaat
         where a.categorie = b.categorie)

succes!

en je moet idd zoals hier boven gezegt de count over 1 element doen en niet over *

Verwijderd

Op maandag 03 december 2001 22:37 schreef skiewiel het volgende:
Moet je met een subquery doen, dus je zegt dat het id gelijk is aan het grootste id (dus de laatste)
MySQL ondersteunt toch geen subqueries? Of heb ik wat gemist?

Verwijderd

sorry dat wist ik dus niet..|:(

welke met php lekker werkende sql doet dat wel?

Verwijderd

Die subquery kun je dan met php simuleren, door het inderdaad maar in 2 query's te doen.. Waarom wil je dat niet?

Verwijderd

Op maandag 03 december 2001 22:42 schreef skiewiel het volgende:
welke met php lekker werkende sql doet dat wel?
PostgreSQL, Informix, Oraccle, DB2, InterBase en zo?

  • PjotrP
  • Registratie: Augustus 2001
  • Laatst online: 01-07 09:12
Als je de structuur van de tabel iets aanpast, krijg je een veel beter overzicht over de gegevens:

+----+--------------+--------------+
| id | levelname | user_header |
+----+--------------+--------------+
| 1 | forge | 1 |
| 2 | forge | 2 |
| 3 | trainstation | 3 |
+----+--------------+--------------+

en user_header =
+----+----------+-----------------+
| id | user_id | header |
+----+----------+-----------------+
| 1 | arny | swat attack |
| 2 | angl2k | swat attack2 |
| 3 | angl2k | Terro camp plan |
+----+----------+-----------------+

Waarbij je eigenlijk de user_id natuurlijk weer moet laten verwijzen naar een echte user tabel.
Op deze manier verlies je de redundantie uit je tabel EN kun je heel gemakkelijk je gegevens opvragen:

select levelname,count( * ) as count,max(id) as id,max(user_header) as user_header, header,user_id from tactics, user_header where user_header=user_header.id group by levelname

Zonnepaneel installateur


  • angl2k
  • Registratie: Maart 2001
  • Laatst online: 29-04 10:53
dat is wel een goed idee ik zal er aan werken
Pagina: 1