Array omzetten naar verschillende variabelen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

James C

James C

25/05/2015 16:24:18
Quote Anchor link
Hoi,

Ik wil graag de uitvoer van mijn query (die nu in een array staat) omzetten naar variabelen waarbij elk resultaat een andere variabelenaam heeft.
Via mijn query probeer ik van 4 verschillende tabellen de som te krijgen van het aantal seconden. Dit werkt want ze staan in de query. Alleen wil ik verderop in mijn script kunnen werken met de vars $seconden1 $seconden2 $seconden3 $seconden4.
Hoe krijg ik dit voor elkaar?

Mijn script:
Quote:
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
<?php
$result
= $mysqli->query("SELECT table_name FROM tables WHERE table_schema = 'testdata' ORDER BY UNIX_TIMESTAMP(create_time) DESC LIMIT 0,4") ;

if (mysqli_num_rows($result) > 0)
{

    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
        {

            $tabelnaam = $row['table_name'];

                if ($mysqli->connect_errno)
                 {

                    printf("Fout bij verbinden: %s\n", $mysqli->connect_error);
                    exit();
                 }


                 if ($result2 = $mysqli2->query("SELECT SUM(seconds) AS seconden FROM $tabelnaam; "))
                 {

                    $row2 = mysqli_fetch_array($result2);

                    $seconden = array();
                    $tel = 1;
                    foreach ($row2 as $testje)
                    {

                    $seconden[$tel++] = $testje;
                    }

                        var_dump($testje);
                 }

        }
}

?>
Gewijzigd op 25/05/2015 16:24:52 door James C
 
PHP hulp

PHP hulp

08/11/2024 14:33:36
 
- SanThe -

- SanThe -

25/05/2015 16:42:35
Quote Anchor link
Je gaat tabelnamen ophalen? Vreemd.
Regels 10 t/m 14 horen niet een een loop, maar direct na het maken van de databaseverbinding.
Regel 20 hoort voor de while te staan.
Regels 21, 22, 23, 25 en 26 kunnen weg.
Regel 24 => $seconden[] = $row2['seconden'];
 
Eddy E

Eddy E

25/05/2015 16:44:39
Quote Anchor link
Vervang je foreach (regel 23 tm 25) met dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

foreach ($row2 as $testje)
                    {

                    $naam = "seconden".$tel;
$$naam = $testje;
$tel ++;
                    }


?>


Uiteraard zonder de php-tags etc.

Toevoeging op 25/05/2015 16:45:53:

Blijkbaar vatten SanThe en ik de boel verschillend op. Al heeft SanThe het over de eerste 4 regels geheel gelijk!
 
- SanThe -

- SanThe -

25/05/2015 16:51:59
Quote Anchor link
Als je het dan nog in losse vars wilt hebben ipv. in een array():
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
foreach($seconden as $key => $value)
{

    ${"seconden".$key} = $value;
}

?>
 
James C

James C

25/05/2015 17:21:32
Quote Anchor link
De reden dat ik tabelnamen moet ophalen is omdat ik een som moet laten zien van het aantal seconden in de laatste 4 door de gebruiker ingevoerde tabellen (elke upload die een gebruiker doet is een nieuwe tabel).
Ik zou niet weten hoe ik er anders achter moet komen welke tabellen als laatste zijn aangemaakt?

Ik heb het nu als volgt en het werkt prima, bedankt!

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
<?php
$result
= $mysqli->query("SELECT table_name FROM tables WHERE table_schema = 'testdata' ORDER BY UNIX_TIMESTAMP(create_time) DESC LIMIT 0,4") ;

if (mysqli_num_rows($result) > 0)
{

    $seconden = array();

    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
        {

            $tabelnaam = $row['table_name'];

                 if ($result2 = $mysqli2->query("SELECT SUM(seconds) AS seconden FROM $tabelnaam; "))
                 {

                    $row2 = mysqli_fetch_array($result2);

                    $seconden[] = $row2['seconden'];

                    foreach($seconden as $key => $value)
                        {

                            ${"seconden".$key} = $value;
                        }
                 }

        }
}

?>
Gewijzigd op 25/05/2015 17:21:49 door James C
 
- SanThe -

- SanThe -

25/05/2015 17:25:43
Quote Anchor link
Regels 18, 19 en 20 horen niet in de loop maar na de loop, dus na regel 24.
 
Eddy E

Eddy E

25/05/2015 20:03:17
Quote Anchor link
James C op 25/05/2015 17:21:32:
De reden dat ik tabelnamen moet ophalen is omdat ik een som moet laten zien van het aantal seconden in de laatste 4 door de gebruiker ingevoerde tabellen (elke upload die een gebruiker doet is een nieuwe tabel).
Ik zou niet weten hoe ik er anders achter moet komen welke tabellen als laatste zijn aangemaakt?


Aan elkaar koppelen...
Dus gewoon 1 tabel voor je gebruikers, 1 voor je uploads.

En dan doe je SELECT tijdstip FROM een_tabel WHERE userid = 3 ORDER BY time LIMIT 4, 1

Dan krijg je de de tijd van het werkstuk van 4 geleden.
Of beter dan:

SELECT NOW() - tijdstip FROM een_tabel WHERE userid = 3 ORDER BY time LIMIT 4, 1

Dan krijg je gewoon het aantal seconden terug van de 4-geleden-aangeleverde-upload bij gebruiker 3.
Mits tijdstip een TIMESTAMP-veldsoort is.
 



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.