Array omzetten naar verschillende variabelen
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)
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
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);
}
}
}
?>
$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
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'];
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
foreach ($row2 as $testje)
{
$naam = "seconden".$tel;
$$naam = $testje;
$tel ++;
}
?>
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!
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)
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
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;
}
}
}
}
?>
$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
Regels 18, 19 en 20 horen niet in de loop maar na de loop, dus na regel 24.
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?
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.