Avatar billede dytti Novice
31. oktober 2009 - 11:30 Der er 11 kommentarer og
1 løsning

query i tabel

Jeg har en tabel hvor der skal puttes en masse data ind i.
Måden jeg er kommet frem til, kræver 36 query sætninger.

Kan det gøres på en lettere måde, med færre query's?

I skal ikke skrive hele scriptet, bare pege mig i den rigtige retning :-)

Her er hvad jeg snakker om:
<body>
<?
    //forbind til server
include '../global/config.php';
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
    if(!$link) {
        die('Kunne ikke forbinde til server: ' . mysql_error());
    }
   
    //vælg database
    $db = mysql_select_db(DB_DATABASE);
    if(!$db) {
        die("Kunne ikke vælge database");
    }
   
//find største
$query  = "SELECT * FROM fangst_log WHERE month='jan' ORDER BY orred1vagt DESC LIMIT 1";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$rekord=$row['orred1vagt']/1000;
}

//find samlet antal fisk
$query = "SELECT SUM(antalfisk) FROM fangst_log";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$antal = $row['SUM(antalfisk)'];
    }

//find samlet antal nulture
$query = "SELECT SUM(nultur) FROM fangst_log WHERE month='jan'";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$nulture = $row['SUM(nultur)'];
    }
?>
<table width="1000" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr class="boxname2">
    <td width="90"><strong>M&aring;ned</strong></td>
    <td width="71"><div align="center"><strong>Januar</strong></div></td>
    <td width="71"><div align="center"><strong>Februar</strong></div></td>
    <td width="71"><div align="center"><strong>Marts</strong></div></td>
    <td width="71"><div align="center"><strong>April</strong></div></td>
    <td width="71"><div align="center"><strong>Maj</strong></div></td>
    <td width="71"><div align="center"><strong>Juni</strong></div></td>
    <td width="71"><div align="center"><strong>Juli</strong></div></td>
    <td width="71"><div align="center"><strong>August</strong></div></td>
    <td width="71"><div align="center"><strong>September</strong></div></td>
    <td width="71"><div align="center"><strong>Oktober</strong></div></td>
    <td width="71"><div align="center"><strong>November</strong></div></td>
    <td width="71"><div align="center"><strong>December</strong></div></td>
  </tr>
  <tr>
    <td width="71" class="boxname2">St&oslash;rste:</td>
    <td width="71" class="boxname2" align="center"> <? echo $rekord ?> kg. <div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
  </tr>
  <tr>
    <td width="71" class="boxname2">Samlet antal</td>
    <td width="71"><div align="center" class="boxname2"><? echo $antal ?> stk.</div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
  </tr>
  <tr>
    <td width="71" class="boxname2">Nulture</td>
    <td width="71"><div align="center" class="boxname2"><? echo $nulture ?></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
    <td width="71"><div align="center"></div></td>
  </tr>
  <tr>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
    <td width="71">&nbsp;</td>
  </tr>
</table>
</body>
Avatar billede Lars_Schutt Nybegynder
31. oktober 2009 - 11:32 #1
Det ser da fint ud?
Det kan da næsten ikke gøres på en lettere måde :)
Avatar billede dytti Novice
31. oktober 2009 - 11:32 #2
Lige for nemhedens skyld, så i kan se hvor jeg vil hen: http://www.dytti.dk/fiskelog/privat/journal.php
Avatar billede dytti Novice
31. oktober 2009 - 11:35 #3
Jo - men så skal jeg jo skrive 3 for hver måned.
det bliver til en del ;-)
Avatar billede michael_stim Ekspert
31. oktober 2009 - 11:38 #4
Prøv at kigge på sql funktionen GROUP BY ;o)
Avatar billede dytti Novice
31. oktober 2009 - 12:30 #5
Ja sq - Den bliver jeg nødt til at kigge nærmere på.
Det ligner noget af det rigtige :-)

Men nu er det weekend, og rødderne har inviteret på fadbamser, så jeg vender tilbage om 1 dag eller 2 - når tømmermændene har lagt sig ;-)

Foreløbig tak, og god weekend til jer
Avatar billede michael_stim Ekspert
31. oktober 2009 - 12:39 #6
Håber det er juleøl på fad. For kan man drikke andet, når nu de kom i går ;o)
31. oktober 2009 - 12:48 #7
Det er ikke helt klart hvad for oplysninger du vil.  Fra din foerste query, "SELECT * FROM fangst_log WHERE month='jan' ORDER BY orred1vagt DESC LIMIT 1" ser det ud til at du bare vil have den ene stoerste fisk per maaned.  Der udover vil du have total antal fisk og total antal fisketure hvor antal er 0.  Jeg gaar ud fra (fordi jeg for nogen tid siden kommenterede paa din webside) at den enkelte fisker udfylder en form for hver fisketur og at databasen derfor indeholder, for hver fisker, en rekord for hver fisketur.  For at teste mine ideer lavede jeg en minidatabase (som kommer nedenfor) og de foelgende to queries:

SELECT month, MAX(orred1vaegt), SUM(antal)
FROM dytti
GROUP BY month

som med nedenstaaende database giver foelgende resultat:

month    MAX(orred1vaegt)    SUM(antal) 
feb     50             45
jan     32             21
mar     33             42

og denne query:

SELECT month, COUNT(antal) as nulture
FROM dytti
WHERE antal = 0
GROUP BY month

som giver dette resultat:

month    nulture 
feb     2
jan     2
mar     2

Jeg haaber det giver lidt inspiration.  Hvis jeg har misforstaaet spoergsmaalet saa fortael. Ellers ha' en god, maaske travl, weekend.

(Resultatet skulle nok have vaeret ORDER BY month.)

Her er databasen:

month    orred1vaegt    antal 
jan     25         3
jan     32         5
jan     12         7
jan     13         3
jan     0         0
jan     0         0
jan     12         2
jan     3         1
feb     12         5
feb     22         12
feb     5         3
feb     0         0
feb     0         0
feb     8         12
feb     50         13
mar     15         14
mar     21         15
mar     7         1
mar     0         0
mar     9         3
mar     0         0
mar     33         8
mar     6         1
Avatar billede dytti Novice
02. november 2009 - 12:31 #8
Så er jeg tilbage, nogenlunde fit for fight ;-)

Jeg har kigget lidt på den der GROUP BY, og det er tilsyneladende den rigtige vej frem.

Jeg hat lavet denne her:
$query  = "SELECT user, month, MAX(orred1vagt), SUM(antalfisk), SUM(nultur)
FROM fangst_log WHERE user='$session->username'
GROUP BY month";

$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{

echo "". $row['month'] ." ". $row['MAX(orred1vagt)']/1000 ." ". $row['SUM(antalfisk)'] ." ". $row['SUM(nultur)'] ."";
    echo "<br />";
}

Det giver flg. resultat:
feb 9 2 0
jan 2,5 4 0
mar 0 0 1

Så det virker :0

Men - Hvordan hulen får jeg nu de enkelte værdier ind i min html tabel?

Eller er jeg tvunget til at bygge en tabel i "echo" delen?
Avatar billede dytti Novice
02. november 2009 - 17:43 #9
Nu har jeg leget lidt mere med det, og er kommet frem med denne løsning:
$query  = "SELECT user, month, MAX(orred1vagt), SUM(antalfisk), SUM(nultur) FROM fangst_log WHERE user='$session->username' and month='jan' GROUP BY user";
$result = mysql_query($query) or die("Mysql Error: ".mysql_error());
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$rekordjan=$row['MAX(orred1vagt)']/1000;
$antaljan=$row['SUM(antalfisk)'];
$nulturejan=$row['SUM(nultur)'];
}

Jeg har så godt nok lavet en for hver måned, men det giver mig lidt mere frihed med at smide variablerne hvor jeg har lyst :-)

michael_stim -> smider du også et svar, så lukker jeg af.

Og tak for hjælpen alle
03. november 2009 - 21:42 #10
Hvis michael_stim ikke smider et svar og du oensker at dele pointene saa kan du jo selv smide et svar og dele.  Det ville vaere godt hvis spoergsmaalet nu kan lukkes.  Det giver god orden, og saa staar det ikke laengere som aabent i min liste af indlaeg.
Avatar billede dytti Novice
04. november 2009 - 11:13 #11
Jamen så lukker jeg af.

Mange tak for hjælpen til alle
Avatar billede michael_stim Ekspert
04. november 2009 - 11:23 #12
Hov, havde helt overset denne. I fremtiden skal du ikke vente på at jeg smider svar, da jeg ikke samler på point ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester