Forum » Server-Side scripting » Ontbrekende waarden
nyan nyan nyan nyan
Berichten: 2076
avatar
Offline Stuur privebericht
Hey allen,

Ik heb het volgende probleem. Ik heb een database met tegen de 3 miljoen records, die allemaal een ID hebben en gemerkt zijn met een datum en een user-id. Stel nu dat ik de afgelopen week wil controleren of er inderdaad 7 resultaten zijn, dan gebruik ik deze:
Code | Selecteer Alles
minimaliseren
1
2
3
SELECT COUNT(*) AS `rijenFROM `allelogs`
 
WHERE YEARWEEK(`date`) = YEARWEEK(CURRENT_DATE INTERVAL 7 DAY
AND 
user_id 1

Uitkomst: 7
Helaas heb je dan weleens dat er een externe storing was, waardoor er gegevens missen. Dan krijg je, als je met de vorige query de gegevens ophaalt, het volgende:

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
id     date Aflopend
2601954    2011
-06-18
2532173    2011
-06-17
2459553    2011
-06-16
2386393    2011
-06-15
2247134    2011
-06-13
2173732    2011
-06-12


Zoals je ziet, mist de 14de. Is er een manier om deze OF in MySQL OF in PHP al toe te voegen, al is het met "null"-waardes? Met andere woorden: Kan ik 'm naast een andere reeks zetten (12 tot en met 18) waarna hij de verschillen ziet en automagisch toevoegd? Het ID maakt daarna overigens niet meer uit; dat wordt niet meer gebruikt.

Hoop dat het duidelijk is

Groet,

Jannick
23-06-2011 16:04
Dit topic is 299 keer bekeken door 46 verschillende leden
Reacties op: "Ontbrekende waarden"
1
Berichten: 26
avatar
Offline Stuur privébericht
Je kan volgens mij via phpmyadmin een row toevoegen, als ik het snap wat je bedoelt.
23-06-2011 18:28
nyan nyan nyan nyan
Berichten: 2076
avatar
Offline Stuur privébericht
Dat weet ik. Ik zou niet om een oplossing vragen als ik het zelf handmatig kan doen. Dan ben ik (met circa 43000 situaties) nog niet snel klaar. Vandaar de vraag of het in een MySQL-query of in PHP kan, systematisch.
23-06-2011 19:09
De causeur!
Berichten: 504
avatar
Offline Stuur privébericht
Kan je niet de dag ophalen met de explode functie.
Dan moet je dus controleren of er elke dag 1tje is, en als dat niet zo is moet je het laten toevoegen.

Zoiets?
23-06-2011 21:19
Rapifia Europe
Berichten: 3716
avatar
Offline Stuur privébericht
Dan zou je over al deze gegevens moeten loopen en kijken of je een datum mist en deze vervolgens invoeren. Al zou ik als server beheerder niet blij zijn als je in één keer 3 miljoen records ging controleren. Daarom moet je even met de LIMIT werken, een stuk of 100 duizend per keer zou ik doen.
23-06-2011 21:37
world-of-maffia.nl
Berichten: 744
avatar
Offline Stuur privébericht
Dan moet je via mysql = UPDATE allelogs WHERE JE WAAR DE HIER ; ofzo?
23-06-2011 23:51
nyan nyan nyan nyan
Berichten: 2076
avatar
Offline Stuur privébericht
@Zwpgangster als ik WIST wat de criteria waren en hoe ik dat in een MySQL query had kunnen verwoorden, dan had ik dit topic niet gemaakt. En een update voor ontbrekende rijen gaat niet werken.

@MrMees Waarom zou je de explode-functie gebruiken? Nogal nutteloos lijkt me.

@L.Groot Dan zou het zoiets moeten worden:
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
<?
//array uit MySQL
$array = array("2011-06-12""2011-06-13""2011-06-15""2011-06-16""2011-06-17""2011-06-18");
$date = new DateTime($array[0]);

for(
$i 0$i 6$i++) {
echo 
$date->format("Y-m-d") . ": " in_array($date->format("Y-m-d"), $array);
echo 
"n";
$date->modify("+1 days");
}
?>


Output:
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
2011-06-121
2011
-06-131
2011
-06-14
2011-06-151
2011
-06-161
2011
-06-171


Maar ja, om zoiets complex in een MySQL-query te krijgen. Ik heb het liefst er geen PHP bij, als het ook met MySQL zelf kan. Nog meer suggesties?
24-06-2011 09:46
Vreemd
Berichten: 1246
avatar
Offline Stuur privébericht
Je zou volgens mij wel een MySQL functie kunnen schrijven die een TEMPORARY tabel maakt en daar de zeven waarden inzet aan de hand van input.
Daarna kan je via een join zeven rijen terug krijgen met alles behalve de datum NULL als er een of meer data missen.
24-06-2011 20:09
Reageer op: "Ontbrekende waarden"
1
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden