Transactions in juiste volgorde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jordy nvt

Jordy nvt

12/06/2011 14:34:32
Quote Anchor link
Op het moment heb ik transacties gemaakt die ervoor zorgen dat gebouwen die klaar zijn met de bouw worden voltooid, dat eenheden worden toegevoegd aan de database indien de training klaar is, dat oorlogen worden berekend als legers aankomen, etc.

Op elke pagina wordt de transactie aangeroepen die vervolgens al deze acties over de hele wereld berekend.

Nu heb ik al deze acties in een aparte database opgeslagen. Dus de trainingen in een tabel 'training', de legers in een tabel 'moving_armies', etcetera.

Nu is mijn vraag: hoe roep ik deze in de juiste volgorde aan? Nu heb ik bijvoorbeeld dat eerst de training transactie wordt opgeroepen, dan de bouw transactie en vervolgens de legers transactie. Maar indien een training om 14:32 is afgelopen, en een oorlog om 14:31, dan wordt alsnog die training eerst gedaan indien het script om 14:35 wordt aangeroepen ofzo.

Hoe voorkom ik dit? Moet ik dan SQL queries maken, en dan iets in een array opslaan ofzo? Hopelijk heb ik het duidelijk gezegd, anders hoor ik het wel.
 
PHP hulp

PHP hulp

19/04/2024 09:29:16
 
Arjan -

Arjan -

12/06/2011 14:39:01
Quote Anchor link
Het is mij niet helemaal duidelijk wat je wilt. Probeer het wat abstracter te formuleren aan de hand van wat codes. Want je legt het nu uit alsof iemand jouw hele systeem moet kennen....

En bedoel je met transactions de transactions in mysql?
Gewijzigd op 12/06/2011 14:40:01 door Arjan -
 
Jordy nvt

Jordy nvt

12/06/2011 20:09:13
Quote Anchor link
Ok, ik zal het probreren uit te leggen. Waarschijnlijk is het een simpel antwoord maar hier dus een gedetailleerde uitleg.

Ik heb bijvoorbeeld 3 tabellen:
- training
- development
- moving_armies

Ze hebben allemaal een waarde 'Eindtijd', die inhoudt wanneer de actie is afgelopen. Dus in het geval van een training geeft deze aan wanneer de training is afgelopen, en bij moving_armies geeft het aan wanneer deze aanval is aangekomen.

Nu heb ik op elke pagina Transactions staan (in MySQL dus) die ophalen of er iets ergens op de wereld is voltooid, bijvoorbeeld een training of ontwikkeling. Stel dat een speler-X om 17:38 inlogt en hij is de eerste sinds 5 minuten die op de server komt kijken (dus hij voert als het ware Transactions uit van acties die in de laatste 5 minuten zijn voltooid). Er blijkt van een andere speler-Y een training om 17:35:40 afgelopen te zijn er komt een aanval bij hem binnen om 17:36:50. Deze worden dus door de speler-X voltooid. Nu worden in het bestand actions.php (waar alle transactions staan) eerst die van een training aangeroepen en dan van een ontwikkeling en dan van een oorlog. Dus eerst wordt de training voltooid en dan de binnenkomende aanval terwijl dit eigenlijk omgekeerd moet zijn: de aanval kwam immers eerder binnen dan de training afgelopen was.

Nu moet ik dus een SQL query maken die van alle 3 de databases de waarden ophaalt en vervolgens op de eindtijd ordert. Dus zoiets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
="SELECT Training_waarde1, Training_waarde2 FROM training, SELECT Ontwikkeling_waarde1 FROM development, SELECT Leger_waarde1, Leger_waarde2, Leger_waarde3, etc FROM moving_armies WHERE Eindtijd<NOW() ORDER BY Eindtijd FOR UPDATE";
?>

(Ja, ik weet dat er niks van klopt, maar het is om het te verduidelijken)

Alleen hoe doe ik dat? Als het nog steeds onduidelijk is hoor ik het wel:-)
Gewijzigd op 12/06/2011 20:09:54 door Jordy nvt
 
Arjan -

Arjan -

12/06/2011 20:20:25
Quote Anchor link
Zonder dat ik jouw hele verhaal begrijp denk ik dat je het via UNION kan doen.


Even uit de losse pols:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(
    SELECT
        Training_waarde1 AS waarde1,
        Training_waarde2 AS waarde2,
        Eindtijd
    FROM
        training
    WHERE
        Eindtijd < NOW()
    )
    UNION
    (
    SELECT
        Ontwikkeling_waarde1 AS waarde1,
        Ontwikkeling_waarde2 AS waarde2,
        Eindtijd
    FROM
        development
    WHERE
        Eindtijd < NOW()
    )
    UNION
    (
    SELECT
        Leger_waarde1 AS waarde1,
        Leger_waarde2 AS waarde2,
        Eindtijd
    FROM
        moving_armies
    WHERE
        Eindtijd < NOW()
    )
    ORDER BY
        Eindtijd ASC


Let er op dat de waarden binnen de SELECT in alle subqueries gelijk moeten zijn.
Gewijzigd op 12/06/2011 20:29:49 door Arjan -
 
Jordy nvt

Jordy nvt

12/06/2011 20:38:07
Quote Anchor link
Ik ga hier overmorgen (dan heb ik pas tijd:-( )meteen mee aan de slag, bedankt in ieder geval!!!
 
Arjan -

Arjan -

12/06/2011 21:01:09
Quote Anchor link
Je zal nog een type veld kunnen toevoegen aan je select, waardoor je onderscheid kan maken tussen de verschillende waarden (training, leger, ontwikkeling).

Zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(
    SELECT
        'training' AS type,
        Training_waarde1 AS waarde1,
        Training_waarde2 AS waarde2,
        Eindtijd
    FROM
        training
    WHERE
        Eindtijd < NOW()
    )
    UNION
    (
    SELECT
        'ontwikkeling' AS type,
        Ontwikkeling_waarde1 AS waarde1,
        Ontwikkeling_waarde2 AS waarde2,
        Eindtijd
    FROM
        development
    WHERE
        Eindtijd < NOW()
    )
    UNION
    (
    SELECT
        'leger' AS type,
        Leger_waarde1 AS waarde1,
        Leger_waarde2 AS waarde2,
        Eindtijd
    FROM
        moving_armies
    WHERE
        Eindtijd < NOW()
    )
    ORDER BY
        Eindtijd ASC
 
Jordy nvt

Jordy nvt

13/06/2011 19:30:17
Quote Anchor link
Bedankt, je zegt dat alle waarden hetzelfde moeten zijn, maar stel dat ik een training heb: die bestaat alleen uit de velden Id, Aantal en Eindtijd. Een aanval bestaat uit wel 20 velden met: Aantal_eenheid1, Aantal_eenheid2, enzovoorts, Eindtijd, etc.

Hoe kan ik dat dan oplossen?
 
Jordy nvt

Jordy nvt

15/06/2011 20:16:21
Quote Anchor link
Kan iemand mij daarmee helpen?
Gewijzigd op 16/06/2011 16:34:31 door Jordy nvt
 
Jordy nvt

Jordy nvt

16/06/2011 21:27:04
Quote Anchor link
Waarschijnlijk moet ik dus met Joins gaan werken, alleen dat snap ik niet helemaal. Op internet heb ik al gezocht, maar hoe zou het er dan in mijn geval uit gaan zien ivm mijn vorige vraag?
 
Jordy nvt

Jordy nvt

20/06/2011 21:31:09
Quote Anchor link
Ok, allerlaatste bump... allerlaatste poging...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.