msql ALTER TABLE vraagje standaard waarde mee geven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nira Duursma

Nira Duursma

09/12/2010 13:01:22
Quote Anchor link
ik maak gebruik van alter table

vb: $sql="ALTER TABLE `data` ADD $sl VARCHAR( 6 ) " ;

dit gaat goed zonder enige problemen

maar nu wil ik de standaardwaarde neer zetten als 0

welke code kan ik hier voor gebruiken na de VARCHAR ( 6 )?


Alvast bedankt weer
 
PHP hulp

PHP hulp

25/04/2024 20:53:40
 
Erik Rijk

Erik Rijk

09/12/2010 13:10:16
 
Nira Duursma

Nira Duursma

09/12/2010 13:38:13
Quote Anchor link
oke thanks ik heb het gevonden..
ik wist even niet goed op welke manier ik het moest omschrijven met het zoeken en dan kom je er niet echt uit om wat bruikbaars te vinden
 

09/12/2010 13:43:34
Quote Anchor link
Waarvoor wil je dit überhaupt?
 
Nira Duursma

Nira Duursma

09/12/2010 15:30:06
Quote Anchor link
ik heb een grafiek draaien met waardes uit een database er moet een mogenlijkhijd zijn nieuwe lijnen aan te maken voor deze lijnen moet gelijk een geschiedenis worden aangemaakt in dit geval moet dat 0 zijn zo dat de lijnen hoe dan ook altijd gelijk beginnen.
 

09/12/2010 15:34:30
Quote Anchor link
Ik snap je verhaal niet helemaal (graag punten, hoofdletters en komma's toevoegen).
Maar volgens mij moet je niet je database aanpassen.
 
Nira Duursma

Nira Duursma

09/12/2010 15:46:40
Quote Anchor link
Er wordt een bepaalt tijdsvlak geslecteerd bv: van 1-dec t/m 15 dec.

De database haald dan de waardes van diverse producten op uit de database en geeft dat weer in de grafiek.

Als er een nieuwe product aan wordt toegevoegt moet deze ook mee genomen worden in de grafiek. als dit produkt op 5 december beschikbaar komt en er zijn geen waardes van voor die tijd dan krijg ik de grafiek niet te zien.

door bij aan maak van een nieuw brodukt deze kolom alvast een waarde 0 mee te geven word hij zonder moeite getoont in de grafiek. als ze dan de waardes willen zien van de maanden november en december dan kan dit produkt gewoon mee getoont worden in de grafiek ook al staan de waardes dan op 0.

snap je het nu een beetje?
 

09/12/2010 15:58:26
Quote Anchor link
Klinkt nog steeds niet correct. Je moet gewoon opslaan wanneer een product beschikbaar is, dan kan je met php o.i.d. kijken of die dan getoond mag worden o.i.d.
 
- SanThe -

- SanThe -

09/12/2010 16:22:59
Quote Anchor link
Dus bij elk nieuw product maak je een nieuwe kolom. Fout datamodel lijkt mij.
 
Nira Duursma

Nira Duursma

09/12/2010 17:09:47
Quote Anchor link
hoe zou het datamodel er dan uit moeten zien?
er komen hoogstens 5 a 6 produkten per jaar bij dus het lijkt me dat het geen probleem zou moeten zijn
Gewijzigd op 09/12/2010 17:10:45 door Nira Duursma
 

09/12/2010 17:17:50
Quote Anchor link
Nira Duursma op 09/12/2010 17:09:47:
hoe zou het datamodel er dan uit moeten zien?
er komen hoogstens 5 a 6 produkten per jaar bij dus het lijkt me dat het geen probleem zou moeten zijn


Jawel, want stel dat je op eens 500 nieuwe producten krijgt. Dan klopt het niet. Bij een paar producten klopt het ook niet. Je hebt namelijk kans op redunantie of foutieve gegevens. Zoek maar eens op: database normalisering.
 
Nira Duursma

Nira Duursma

09/12/2010 17:20:00
Quote Anchor link
@ Karl dat kan maar gaat niet werken

elke dag wordt er een waarde bij een produkt gezet, dit word over een periode van 6 weken getoond. bv. de temperatuur (= is een produkt) deze word elke dag gemeten en in een grafiek getoond.

Als ze dan 3 weken later of zo een lijn in de grafiek willen hebben met de luchtvochtigheid die van af dan ook elke dag gemeten word. dan begint het probleem.

Als ze deze samen in een grafiek willen hebben dan is der van de eerste periode geen data. en zal de luchtvochtigheids lijn beginnen bij het begin.

deze gebruikt de data van nu en combineerd het met de datum van 6 weken geleden. dit heb ik opgelost door de data voor die tijd aan te vullen met 0 waardoor de meting toch op de juiste dag word weer gegeven.



Toevoeging op 09/12/2010 17:21:42:

Karl Karl op 09/12/2010 17:17:50:

Jawel, want stel dat je op eens 500 nieuwe producten krijgt. Dan klopt het niet. Bij een paar producten klopt het ook niet. Je hebt namelijk kans op redunantie of foutieve gegevens. Zoek maar eens op: database normalisering.


ik had het dus over 5 of 6 geen 500 :)

tegen de tijd dat er zoveel zijn bij gekomen zijn we al weer een paar jaar verder
 
Kris Peeters

Kris Peeters

09/12/2010 17:42:44
Quote Anchor link
Het gaat dus om metingen, niet zozeer om producten

Het lijkt me dat jij nodig hebt (ik vereenvoudig):

tabel ding_te_meten
- id
- naam
- eenheid (eenheid waarin gemeten wordt)
eventueel dingen als - beschrijving, titel_grafiek, ...

tabel meting
- id
- te_meten_id
- tijd (datetime)
- waarde (waarschijnlijk in float)


De waarden van gelijk welke grafiek haal je dus uit de tabel meting.
Een grafiek met 1 lijn haal je dan uit de DB door alle metingen te bekijken met de zelfde te_meten_id.

Een nieuw product toevoegen, is dan enkel een kwestie van een nieuw record in te voegen.

Klinkt dit zinnig of zie jij nog mogelijkheden die je nu hebt, maar denkt niet meer te hebben met structuur zoals ik voorstel?
Gewijzigd op 09/12/2010 17:42:56 door Kris Peeters
 
Nira Duursma

Nira Duursma

10/12/2010 11:49:21
Quote Anchor link
hoi Kris

zzo iets soort gelijks heb ik ook alleen de tabel meting ziet er anders uit

- id
- te_meten_id
- tijd (datetime)
- waarde 1
- waarde 2
- waarde 3

enz
 
Kris Peeters

Kris Peeters

10/12/2010 12:03:52
Quote Anchor link
Ook hier: vraag je eens af of die drie meting waarden nodig zijn.

1 meting geeft je 1 getal.
Heb je meer dan 1 getal nodig, voeg dan twee records in met elk slechts 1 getal.


Jij gaat uit van een maximum aantal "soorten metingen", een maximum aantal metingen per "soort meting", ...
Je moet dat niet doen.
Je zet jezelf, onnodig, vast in een keurslijf.

Hoe ga je nu om met die "waarde 1", "waarde 2", ... ?
Welke waarde zet je in je grafiek?
Wat doe je met de rest?
Gewijzigd op 10/12/2010 12:04:57 door Kris Peeters
 
F Loogman

F Loogman

10/12/2010 12:05:33
Quote Anchor link
was: Ik zou hetzelfde doen als Nira, een join minder scheelt weer in performance.

Bij nader inzien, is een gekoppelde tabel voor de toekomst waarschijnlijk toch handiger. Je kunt namelijk ook de uitkomsten of grafiek cachen om performance te verbeteren.
Gewijzigd op 10/12/2010 13:34:52 door F Loogman
 
Nira Duursma

Nira Duursma

10/12/2010 13:03:12
Quote Anchor link
Hoi Kris

ik heb de database nu zo: oke de datum kan anders ingevoerd worden maar is nu niet van belang er wordt geslecteerd op week nummer en stap.

Afbeelding

als ik de grafiek maak haald hij zeg maar de sl130 lijn op en maakt daar een array van 1.22, 1.23, 1.24, 1.23 enz. deze array kan weer ingelezen worden in de grafiek.

als er nieuwe waardes worden toegevoegt komt er een nieuwe row bij al wil ik een nieuwe meting toevoegen komt er een kolom bij. bv sl109 daar van was het dus de bedoeling dat deze gevuld worden met de waarde 0 dat als deze opgevraagt wordt gelijk begint met de rest ook al is de waarde 0.
Gewijzigd op 10/12/2010 13:04:48 door Nira Duursma
 
Kris Peeters

Kris Peeters

10/12/2010 17:04:52
Quote Anchor link
Okay, kijk eens.

Ik heb een ruw afgewerkte versie gemaakt van wat je ongeveer wil.
Ik geef je alles mee, inclusief sql export met gegevens.

De bedoeling is enkel je te tonen hoe je een eenduidig systeem kan hebben, waarbij je niet meer aan de structuur van je tabellen moet prutsen.

Wil je een extra "product" -> gewoon een record invullen in de tabel ding_te_meten.

Ik heb een extra veld bij meting gezet, namelijk reeks. Stel dat je nog een onderscheid wil maken wat betreft verschillende reeksen metingen.

Ook in de tabel meting moet je niet meer prutsen. Gewoon records invoegen.

Je ziet slechts twee sql strings (En geen JOINs trouwens)

index.php
Juist de database connectie gegevens aanpassen
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
  $con
= mysql_connect('localhost', 'root', '');  // aanpassen
  $db = mysql_select_db('phphulp', $con);         // aanpassen
  
  $_GET['id'] = empty($_GET['id']) ? 0 : $_GET['id'] ;
  $_GET['reeks'] = empty($_GET['reeks']) ? 0 : $_GET['reeks'] ;
  
  $sql_grafiek_gegevens = 'SELECT id, naam, eenheid, beschrijving FROM ding_te_meten WHERE id='. (int) $_GET['id'];
  $sql_grafiek_metingen = 'SELECT id, te_meten_id, reeks, waarde, tijd FROM meting WHERE te_meten_id='. (int) $_GET['id'] .' AND reeks='. (int) $_GET['reeks'];
  
  $res = mysql_query($sql_grafiek_gegevens);
  if ($row = mysql_fetch_array($res)) {
    $gegevens = $row;
  }

  if (!empty($gegevens)) {
    $res = mysql_query($sql_grafiek_metingen);
    $punten = array();
    $waarden = array();
    $key = 0;
    $punten_url = '';
    while ($row = mysql_fetch_array($res)) {
      $punten[] = $row;
      $waarden[] = $row['waarde'];
      $punten_url .= ($key > 0 ? ',' : '') . $row['waarde'];
      $key++;
    }

    $echo = '
      <h2>'
. $gegevens['naam'] .'</h2>
      <div id="grafiek_container">
        <div class="y-eenheid">'
. $gegevens['eenheid'] .'</div>
        <div>max: '
. max($waarden) .'</div>
        <img src="grafiek.php?points='
. $punten_url .'"/>
        <div>min: '
. min($waarden) .'</div>
        <div class="x-eenheid">tijd</div>
      </div>
      <p>'
. $gegevens['beschrijving'] .'</p>
    '
;//'<img src=""'
  
  echo '
<html>
  <head>
    <style>
      #grafiek_container {width: 230px;}
      #grafiek_container .y-eenheid {text-align: left;}
      #grafiek_container .x-eenheid {text-align: right;}
    </style>
  </head>
  <body>
    '
. $echo .'
    
    <hr/>
    <a href="?id=1&reeks=1">Product 1, reeks 1</a><br/>
    <a href="?id=2&reeks=1">Product 2, reeks 1</a><br/>
    <a href="?id=1&reeks=2">Product 1, reeks 2</a><br/>
          
  </body>
</html>'
;
  
  }

  else {
    echo '<a href="?id=1&reeks=1">Product 1, reeks 1</a><br/>
          <a href="?id=2&reeks=1">Product 2, reeks 1</a><br/>
          <a href="?id=1&reeks=2">Product 1, reeks 2</a><br/>'
;
  }

?>


image.php
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
<?php
if (!empty($_GET['points'])) {
  $points = explode(',', $_GET['points']);
  setPoints($points);
}
  
function
setPoints($points) {
  $x = 200;
  $y = 200;

  $gd = imagecreatetruecolor($x, $y);                                   // resource imagecreatetruecolor ( int $width , int $height )
  $yellow = imagecolorallocate($gd, 255, 255, 0);                       // int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
  
  $range = max($points) - min($points);
  $factor = (180 / $range);
  
  foreach ($points as $key=>$point) {
    $x = 10 + 10 * $key ;
    $y = 190 - (($point - min($points)) * $factor);
    imagesetpixel($gd, round($x),round($y), $yellow);                   // bool imagesetpixel ( resource $image , int $x , int $y , int $color )
  }
  header('Content-Type: image/png');
  imagepng($gd);
}

?>


sql export
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
DROP TABLE IF EXISTS ding_te_meten;
CREATE TABLE IF NOT EXISTS ding_te_meten (
  id int(11) NOT NULL AUTO_INCREMENT,
  naam varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  eenheid varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  beschrijving text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO ding_te_meten (id, naam, eenheid, beschrijving) VALUES
(1, 'Temperatuur koelkast', 'C', 'Meting van de temperatuur van de koelkast'),
(2, 'Druk manometer', 'hPa', 'Druk afgelezen van de manometer aan de stoomketel');
-- --------------------------------------------------------
DROP TABLE IF EXISTS meting;
CREATE TABLE IF NOT EXISTS meting (
  id int(11) NOT NULL AUTO_INCREMENT,
  te_meten_id int(11) NOT NULL DEFAULT '0',
  reeks int(11) NOT NULL DEFAULT '0',
  waarde float DEFAULT NULL,
  tijd datetime DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO meting (id, te_meten_id, reeks, waarde, tijd) VALUES
(NULL, 1, 1, 4.205, '2010-12-10 13:32:22'),
(NULL, 1, 1, 5.2, '2010-12-11 13:34:30'),
(NULL, 1, 1, 5.04, '2010-12-12 13:36:30'),
(NULL, 1, 1, 3.1, '2010-12-14 13:36:30'),
(NULL, 1, 1, 3.15, '2010-12-15 13:36:30'),
(NULL, 1, 1, 3.14, '2010-12-16 13:36:30'),
(NULL, 1, 1, 3.19, '2010-12-17 13:36:30'),
(NULL, 1, 1, 3.31, '2010-12-18 13:36:30'),
(NULL, 1, 1, 3.21, '2010-12-19 13:36:30'),
(NULL, 1, 1, 3.51, '2010-12-20 13:36:30'),
(NULL, 1, 1, 3.11, '2010-12-21 13:36:30'),
(NULL, 1, 1, 3.31, '2010-12-22 13:36:30'),
(NULL, 1, 1, 3.21, '2010-12-23 13:36:30'),
(NULL, 1, 1, 3.1, '2010-12-24 13:36:30'),
(NULL, 1, 2, 3.205, '2010-12-10 13:32:22'),
(NULL, 1, 2, 3.2, '2010-12-11 13:34:30'),
(NULL, 1, 2, 3.04, '2010-12-12 13:36:30'),
(NULL, 1, 2, 3.1, '2010-12-14 13:36:30'),
(NULL, 1, 2, 3.20, '2010-12-15 13:36:30'),
(NULL, 1, 2, 3.80, '2010-12-16 13:36:30'),
(NULL, 1, 2, 3.19, '2010-12-17 13:36:30'),
(NULL, 1, 2, 3.57, '2010-12-18 13:36:30'),
(NULL, 1, 2, 3.21, '2010-12-19 13:36:30'),
(NULL, 1, 2, 3.8, '2010-12-20 13:36:30'),
(NULL, 1, 2, 3.11, '2010-12-21 13:36:30'),
(NULL, 1, 2, 3.1, '2010-12-22 13:36:30'),
(NULL, 1, 2, 2.21, '2010-12-23 13:36:30'),
(NULL, 1, 2, 3.1, '2010-12-24 13:36:30'),
(NULL, 2, 1, 1011.65, '2010-12-07 14:32:41'),
(NULL, 2, 1, 1011.45, '2010-12-08 14:32:41'),
(NULL, 2, 1, 1011.25, '2010-12-09 14:32:41'),
(NULL, 2, 1, 1013.05, '2010-12-10 14:32:41'),
(NULL, 2, 1, 1011.15, '2010-12-11 14:32:41'),
(NULL, 2, 1, 1013.1, '2010-12-12 14:32:41'),
(NULL, 2, 1, 1014.8, '2010-12-13 14:32:41'),
(NULL, 2, 1, 1013.25, '2010-12-14 14:32:41'),
(NULL, 2, 1, 1014.25, '2010-12-15 14:32:41'),
(NULL, 2, 1, 1013.1, '2010-12-16 14:32:41'),
(NULL, 2, 1, 1014.8, '2010-12-17 14:32:41'),
(NULL, 2, 1, 1013.1, '2010-12-18 14:32:41'),
(NULL, 2, 1, 1013.4, '2010-12-19 14:32:41');
Gewijzigd op 10/12/2010 18:25:01 door Kris Peeters
 
Nira Duursma

Nira Duursma

13/12/2010 13:23:14
Quote Anchor link
Hoi Kris
ik ga er mee aan de slag of ik het op jou manier ook voor elkaar kan krijgen.. dat is wel intresand om uit te zoeken of het dan ook werkt met wat ik voor ogen heb..

Bedankt in ieder geval
 



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.