Toon posts:

[MySQL] implementatie van een view? *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als je bijv. 4 tabellen in een mysql database hebt. Die heten tabel1, tabel2, tabel 3 en tabel 4. En in die eerste 3 tabellen staan allerlei gegevens. Maar in die 4e tabel moet je gegevens hebben uit de 1e 3 tabellen, maar wel bewerkt. Bijv. tabel 4 = tabel1 + tabel 2 x tabel 3

De gegevens uit tabel 1-3 worden om het uur vernieuwd. Hoe krijg je die gegevens in tabel 4? Is dat met script, als je de gegevens vernieuwd. Of is dat mogelijk om automatisch in tabel 4 gegevens te krijgen in MySql zelf.??

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Dat zul je met een script moeten doen. :)

Maar dat soort berekeningen moet je eigenlijk niet opslaan maar op het moment dat je de data nodig hebt berekenen.

[ Voor 58% gewijzigd door Gert op 02-02-2003 23:06 ]


  • Stylax
  • Registratie: December 2002
  • Laatst online: 13-05 06:56
offtopic:
Uhm mayB moet je in de toekomst een andere titel verzinnen dan Mysql. Zet er ff je probleem in ofzo.

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

hmm, ik zou zelf voor een trigger kiezen. Ik weet niet of MySQL het ondersteunt, maar dat is het beste.

Op het moment dat tabel1/2/3 bewerkt wordt (bijvoorbeeld) runt MySQL automatisch je trigger waardoor tabel4 geupdate wordt.


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 24-08 11:11

pietje63

RTFM

als ik je voorbeeld zo zie kun je het het beste per keer opnieuwe berekenen en niet in verschillende tabellen opslaan
je kunt dit doen door verschillende database connecties achter elkaar te maken en dan de gegevens op te halen en de verschillende tabellen en die dan te bewerken

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Verwijderd

Topicstarter
Gert schreef op 02 February 2003 @ 23:05:
Dat zul je met een script moeten doen. :)

Maar dat soort berekeningen moet je eigenlijk niet opslaan maar op het moment dat je de data nodig hebt berekenen.
Die tabellen gegevens moeten altijd bereikbaar zijn en worden op een website weer gegeven wanneer deze geraadpleegd wordt. Als het een tabel is van 1000 rijen, dan kost het aardig wat tijd. Vandaar mijn vraag of je die gegevens in tabel 4 niet gelijk er in kan zetten zodra tabel 1-3 gegevens bekend zijn.

  • jkf
  • Registratie: Oktober 2000
  • Laatst online: 21-06-2025

jkf

Zo stellig zeggen, dat er maar moet worden gerekend op het moment dat gelezen wordt.
Wordt de waarde vaak gevraagd / is de berekening "duur"?
Nee: -> Berekenen op het moment van afvragen
Indien ja:
Wordt de waarde vaker gevraagd of vaker gewijzigd?
Vaker gewijzigd: -> Berekenen op het moment van afvragen
Vaker geschreven: -> Bereken op het moment van erin schrijven

P II 233 @ begane grond, rip (1997-2007), vervangen door vituele server uptime,


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Zoiets noemen ze vaak een (evt zelfs materialized query table in DB2 / materialized) view trouwens ;)
En dat ondersteund mysql verder niet, lijkt me dat je het best idd de query opnieuw kan draaien zodra je het nodig hebt.

En als het met 1000 rijen veel tijd kost doe je wat fout, heb je wel indices die relaties snel opzoekbaar maken?

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 24-08 11:11

pietje63

RTFM

je kunt als je tabel 1-3 wijzigt toch meteen tabel 4 wijzigen?
ik weet niet met wat voor functie je die tabellen wijzigt maar tegelijk 4 wijzigen lijkt mij niet heel moeilijk..

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

offtopic:
topictitle aangepast

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Gert schreef op 02 February 2003 @ 23:05:
Dat zul je met een script moeten doen. :)

Maar dat soort berekeningen moet je eigenlijk niet opslaan maar op het moment dat je de data nodig hebt berekenen.
Een php script, maar hoe kan ik gemakkelijk de gegevens uit die eerste 3 tabellen met elkaar vermenigvuldigen en vervolgens de top5 van het resultaat laten zien?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:08
Ik denk dat het niet verstandig is om met een PHP script te gaan prutsen, maar dat je beter jkf's oplossing kan proberen. In elk geval werk je dan met dezelfde query over alle tabellen, maar afhankelijk van de manier waarop je gegevens gebruikt worden, schrijf je het resultaat ofwel naar je PHP pagina ofwel naar je tijdelijke tabel.

Je zegt zelf al dat de gegevens in de eerste drie tabellen om het uur worden ververst: dat is niet erg vaak. Als je site druk bezocht is (meer dan 1x per uur een bezoeker op de pagina in kwestie) kun je dus beter met het verversen van de gegevens tabel 4 opnieuw vullen. Als je altijd dezelfde gegevens uit de eerste drie tabellen nodig hebt (ik hoorde iets over een "top 5") dan kun je ook elk uur na het verversen een statische HTML pagina genereren: dat is helemaal efficient!

Zelfs als je gegevens altijd aangepast kunnen worden, kun je misschien nog wel wegkomen met een statische pagina die elke zoveel minuten opnieuw gegenereerd wordt. Dat kan ik zo zonder de specifieke toepassing te kennen echter niet beoordelen.

[ Voor 59% gewijzigd door Soultaker op 03-02-2003 12:39 ]


Verwijderd

Topicstarter
Details: website wordt gemiddeld door 50 bezoekers bezocht per uur. De database zou in de toekomst om het half uur ververst kunnen gaan worden.
Ik heb dus de keus uit het wegschrijven in tabel 4, wanneer gegevens bekend zijn uit andere tabellen. Maar hoe doe je dit? met een trigger? Met trigger weet ik het wel, maar zijn er nog andere manieren?

En ik heb mogelijkheid om de gegevens uit eerste 3 kolommen te verwerking in php script zodra dit wordt opgevraagd. Maar hoe doe je dit? Is dat
($data-> kolom1) + ($data-> kolom2);

?
Alvast bedankt voor de reacties.

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 23-08 21:39
Eeh, ik wil niet flauw doen maar 50 bezoekers per uur is niet echt schokkend. Dus als je geen tabellen hebt met een paar miljoen rows kan je gemakkelijk die queries 'live' draaien, dus zonder tabel 4.

Zoek verder even een MySQL tutorial en let dan vooral op bij het stuk over joins :D

Verwijderd

Topicstarter
Dus gewoon in php script de join laten uitvoeren en gelijk resultaat naar website sturen. Ongeveer 2000 rows zijn het ongeveer. I will try that

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Kan je iets precieser worden over de functie van de tabellen en de velden.
Je hebt het over tabellen bij elkaar optellen, maar dat is niet mogelijk, wel kan je velden in records in de tabellen bij elkaar optellen.

Hoe is het verband tussen de tabellen?
Waarop kan je de tabellen met elkaar verbinden?
Als het 1-1 is, waarom staat het niet in dezelfde tabel?

Kortom vragen waarop je antwoord kan geven, zodat ik je beter antwoord kan geven.

Verwijderd

Topicstarter
Ja, sorry. Er is 1 tabel met 4 kolommen. De gegevens in kolom 4 = kolom 1 + kolom 2 + kolom 3. Het is een website met statistieken voor spelers. Deze stats wordt auto geupdate om de 30 min.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Als je drie tabellen via een script ofzo worden geupdate kan je ook met een simpele query MySQL het werk van het verversen van de vierde laten doen... Dat kan met een INSERT INTO % SELECT %, en in mijn ervaring werkt dat behoorlijk snel.

Rustacean


Verwijderd

Topicstarter
Ja, maar de vraag is dus wanneer en hoe dat wordt uitgevoerd. Moet dat worden gedaan wanneer gegevens ververst worden door PHP script? Of moet mysql het zelf doen, nadat gegevens ververst worden door bijv. een trigger?

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Als het 4 kolommen zijn in 1 tabel, dan direct tijdens de insert van je record.
Voorbeeld statement: insert into tabel values (k1,k2,k3,k3/(k2-k1))

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Volgens mij kent MySQL nog geen trigger, dus ik zou als ik jou was een INSERT % SELECT % doen op het moment dat de eerste drie tables worden geupdate.

Rustacean


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Het zijn geen tabellen maar velden in een tabel. zie zijn reactie op mijn vraag.
Manuzhai schreef op 04 februari 2003 @ 12:11:
Volgens mij kent MySQL nog geen trigger, dus ik zou als ik jou was een INSERT % SELECT % doen op het moment dat de eerste drie tables worden geupdate.

Verwijderd

Topicstarter
Ok, bedankt voor de reacties. Ik heb nu het opgelost als volgende. Het phpscript dat nieuwe waarden uit een bestand upload en in de db zet heb ik aangevuld met een UPDATE stats SET kolom 4 = ((kolom1 * kolom 2) + kolom 3);

Its working know. Als iemand een snellere / betere manier weet..................
Pagina: 1