Toon posts:

[php/mysql] lastige query opbouwen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
stel:

ik heb een database met daarin een stuk of 20.000 berichten
op deze manier:
code:
1
2
3
4
5
| uin | van | aan | bericht | tijd |
------------------------------------
| 11  |  3  |  4  | hey a.. | 6793 |
| 12  |  4  |  3  | hoi a.. | 6545 |
| 13  |  3  |  4  | hallo.. | 6343 |

nu wil de de berichten displayen zoals op deze pagina's:

http://www.vote4me.nl/?cmd=messages&nummer=460

ik ben al wezen kloten maar ik kom er niet uit,
ik gebruik nu dit:
code:
1
2
3
4
5
6
7
8
SELECT uin,
van,
aan,
bericht,
tijd FROM messages_table 
WHERE aan='$nummer' 
OR van='$nummer' 
ORDER BY tijd DESC

en nog een zooitje ander query's erbij, waardoor het zooitje onzettend traag wordt.

maar daarmee haal ik alle berichten die van en naar $nummer zijn verzonden uit de db, terwijl ik alleen (per afzender) het nieuwste bericht hoef te hebben.

hoe zouden jullie dit doen?

  • decramy
  • Registratie: December 2001
  • Laatst online: 11:27

decramy

root@birdie:~#

offtopic:
WHAA!! Die smilies daar :'(


[ontopic]
PHP:
1
<?if(($cmd = "messages")&amp;&amp;($nummer)){  $query = "SELECT * FROM messages_table WHERE aan=$nummer OR van=$nummer ORDER BY tijd DESC [b]LIMIT(0,1)[/b]";}elseif(!$nummer){  //wel een nummer opgeven}else{  //wel goede cmd opgeven}?>

maar k vat niet echt wat je wilt...
[/ontopic]

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op donderdag 30 mei 2002 21:41 schreef decramy het volgende:
maar k vat niet echt wat je wilt...
hij heeft het over een grote hoeveelheid berichtjes (result) dat zijn query oplevert en dat dat lang duurt

Doet iets met Cloud (MS/IBM)


  • decramy
  • Registratie: December 2001
  • Laatst online: 11:27

decramy

root@birdie:~#

als je een privmsgs systeem wilt hebben en "postvak in" wilt weergeven is het:
PHP:
1
<?$query = "SELECT * FROM messages_table WHERE aan=$nummer ORDER BY tijd DESC [b]LIMIT(0,1)[/b]";?>

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 13:39
Misschien kun je beter met een goed databasemodel beginnen. Dit gaat niet, wat je kunt doen is een URL met daarin de ID sturen.

* zeroxcool moet leren lezen, verwijder dit maar uit je hoofd =]

zeroxcool.net - curity.eu


  • decramy
  • Registratie: December 2001
  • Laatst online: 11:27

decramy

root@birdie:~#

Op donderdag 30 mei 2002 21:43 schreef D2k het volgende:

[..]

hij heeft het over een grote hoeveelheid berichtjes (result) dat zijn query oplevert en dat dat lang duurt
dan moet je gebruik maken van de LIMIT functie

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Verwijderd

Topicstarter
Op donderdag 30 mei 2002 21:46 schreef ZeRoXcOoL het volgende:
Misschien kun je beter met een goed databasemodel beginnen. Dit gaat niet, wat je kunt doen is een URL met daarin de ID sturen.
een url met de id erin??
dat heb ik toch? ?cmd=messages&nummer=460 ???

  • decramy
  • Registratie: December 2001
  • Laatst online: 11:27

decramy

root@birdie:~#

Wat wil je doen?
heb je een forum?
heb je privmsgs?

en wat hij bedoelde, is dat je het uin selecteerd

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Verwijderd

Topicstarter
kijk het moet ongeveer zoiets worden:
code:
1
2
3
4
5
6
7
8
9
10
11
SELECT 
van,
aan,
bericht,
tijd,
count(*) 
FROM v4m_messages 
WHERE 
van=1 OR aan=1 
GROUP BY van 
ORDER BY tijd DESC

Verwijderd

Topicstarter
Op donderdag 30 mei 2002 21:53 schreef decramy het volgende:
Wat wil je doen?
heb je een forum?
heb je privmsgs?

en wat hij bedoelde, is dat je het uin selecteerd
ik wil gewoon exact hetzelfde als op http://www.vote4me.nl/?cmd=messages&nummer=460

dus van elke persoon die aan $nummer=460 een berichtje heeft gestuurd, het nieuwste bericht laten zien.

en van iedereen waar $nummer=460 een bericht naar toe heeft gestuurd, het nieuwste bericht laten zien.

Verwijderd

Op donderdag 30 mei 2002 21:56 schreef ludohelder het volgende:

[..]

ik wil gewoon exact hetzelfde als op http://www.vote4me.nl/temp.php?cmd=messages&nummer=460

dus van elke persoon die aan $nummer=460 een berichtje heeft gestuurd, het nieuwste bericht laten zien.

en van iedereen waar $nummer=460 een bericht naar toe heeft gestuurd, het nieuwste bericht laten zien.
Dat zal je in 2 queries moeten gaan oplossen, want dat gaat niet lukken in 1 query.

Verwijderd

Topicstarter
Op donderdag 30 mei 2002 21:54 schreef ludohelder het volgende:
kijk het moet ongeveer zoiets worden:
code:
1
2
3
4
5
6
7
8
9
10
11
SELECT 
van,
aan,
bericht,
tijd,
count(*) 
FROM v4m_messages 
WHERE 
van=1 OR aan=1 
GROUP BY van 
ORDER BY tijd DESC
deze query is op zich goed, hij laat per unieke 'van' 1 berichtje zien, maar hij laat niet het nieuwste bericht zien, maar juist het oudste.

en ook al verander ik de ORDER BY, ik krijg hem niet juist.

Verwijderd

Topicstarter
Op donderdag 30 mei 2002 22:02 schreef MrX het volgende:

[..]

Dat zal je in 2 queries moeten gaan oplossen, want dat gaat niet lukken in 1 query.
bijv:
1 die alle berichten aan $nummer ophaald,
en 1 die alle berichten van $nummer ophaald?

maar hoe moet ik ze dan combineren?

Verwijderd

Topicstarter
oke, makkelijkere opdracht

ik wil een lijst met unieke van's (afzenders)

dus bij $nummer=460 zou deze lijst er zo uit moeten zien:
11581
12175
14655
12755
10710
enz enz...

en dan het liefst ook in die volgorde.

Verwijderd

Op donderdag 30 mei 2002 22:06 schreef ludohelder het volgende:

[..]

bijv:
1 die alle berichten aan $nummer ophaald,
en 1 die alle berichten van $nummer ophaald?

maar hoe moet ik ze dan combineren?
Yups ... en je kan gewoon in 1 pagina's 2 queries maken, en die vervolgens in 1 tabel zetten ... geen probleem. Jammer dan MySQL niet het UNION statement ondersteunt, want anders had je ze in SQL aan elkaar kunnen ritsen.

edit:

De queries zouden dus zoiets zijn:
[code]SELECT van, aan, bericht,tijd
FROM v4m_messages
WHERE
van=1
GROUP BY aan
ORDER BY tijd DESC, aan DESC[/code]
en
[code]SELECT van, aan, bericht,tijd
FROM v4m_messages
WHERE
aan=1
GROUP BY van
ORDER BY tijd DESC, van DESC[/code]
Geen garantie dat dit gaat werken, maar volgens mij wel.


[edit 2]
Ooops ... foutje gefixed.
[/edit 2]

Verwijderd

Topicstarter
Op donderdag 30 mei 2002 22:26 schreef MrX het volgende:

[..]

Yups ... en je kan gewoon in 1 pagina's 2 queries maken, en die vervolgens in 1 tabel zetten ... geen probleem. Jammer dan MySQL niet het UNION statement ondersteunt, want anders had je ze in SQL aan elkaar kunnen ritsen.

edit:

De queries zouden dus zoiets zijn:
[code]SELECT van, aan, bericht,tijd
FROM v4m_messages
WHERE
van=1
GROUP BY aan
ORDER BY tijd DESC, aan DESC[/code]
en
[code]SELECT van, aan, bericht,tijd
FROM v4m_messages
WHERE
aan=1
GROUP BY van
ORDER BY tijd DESC, van DESC[/code]
Geen garantie dat dit gaat werken, maar volgens mij wel.


[edit 2]
Ooops ... foutje gefixed.
[/edit 2]
thnx, ik ga het (morgen) ff proberen.

Verwijderd

offtopic:
Dat meisje van dat profiel heeft mij nog een keer naar Trance Energy gebracht met de auto.... :9~:9~:9~:9~:9~
Pagina: 1