|  | 		    
					
        
         
          
         
	
          | |  | Tælle i udtræk fra MySQL Fra : Kim Ludvigsen
 | 
 Dato :  24-09-06 15:32
 | 
 |  | 
 
            Jeg skal lave et opslag i en MySQL-database for at tælle, hvor mange 
 forekomster der er af hver værdi i de enkelte felter.
 Jeg har 28 felter med 5 mulige værdier i hver, og jeg skal have lavet en 
 liste i stil med dette:
 Felt 1
 værdi 1: 5 forekomster
 værdi 2: 1 forekomst
 værdi 3: 3 forekomster
 værdi 4: 2 forekomster
 værdi 5: 1 forekomst
 Felt 2
 Værdi 1: 1 forekomst
 osv.
 Jeg går ud fra, at det er nemmest/bedst at hente samtlige oplysninger ud 
 af databasen på én gang og så lade php finde tallene i stedet for at 
 foretage 28 opslag i databasen. Men hvordan gør jeg?
 Jeg er på helt bar bund, og har kun et meget overfladisk begreb om php 
 og MySQL, så pædagogisk hjælp eller henvisning til en pædagogisk 
 hjemmeside påskønnes.
 -- 
 Mvh. Kim Ludvigsen
 Instant Converter lader dig omregne forskellige måleenheder, for 
 eksempel miles og kilometre, ounce og gram samt fahrenheit og celcius.
http://kimludvigsen.dk |  |  | 
  Martin (24-09-2006) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  24-09-06 15:42
 | 
 |  | Kim Ludvigsen wrote:
 > Jeg skal lave et opslag i en MySQL-database for at tælle, hvor mange
 > forekomster der er af hver værdi i de enkelte felter.
 >
 > Jeg har 28 felter med 5 mulige værdier i hver, og jeg skal have lavet en
 > liste i stil med dette:
 >
 > Felt 1
 > værdi 1: 5 forekomster
 > værdi 2: 1 forekomst
 > værdi 3: 3 forekomster
 > værdi 4: 2 forekomster
 > værdi 5: 1 forekomst
 >
 > Felt 2
 > Værdi 1: 1 forekomst
 > osv.
 >
 > Jeg går ud fra, at det er nemmest/bedst at hente samtlige oplysninger ud
 > af databasen på én gang og så lade php finde tallene i stedet for at
 > foretage 28 opslag i databasen. Men hvordan gør jeg?
 >
 > Jeg er på helt bar bund, og har kun et meget overfladisk begreb om php
 > og MySQL, så pædagogisk hjælp eller henvisning til en pædagogisk
 > hjemmeside påskønnes.
 >
 
 Du kan lave det lidt ala
 
 $array = array(
 array(
 felt=>1
 ,værdi=>5
 ,antal=>5
 )
 , array(
 felt=>1
 ,værdi=>5
 ,antal=>1
 )
 // osv.
 );
 
 
 |  |  | 
  Kim Ludvigsen (24-09-2006) 
 
	
          | |  | Kommentar Fra : Kim Ludvigsen
 | 
 Dato :  24-09-06 16:09
 | 
 |  | 
 
            Den 24-09-06 16.41 skrev Martin følgende:
 > Du kan lave det lidt ala
 > 
 > $array = array(
 Jeg er desværre på så bar bund, at jeg ikke aner, hvordan jeg gør det.
 Jeg er ikke kommet længere end til (jeg har også et datofelt med timestamp):
 $query = 'SELECT * FROM database where dato is not null';
 $result = mysql_query($query);
 Og jeg er ikke engang sikker på, at det er den rigtige måde at hente det 
 ud fra databasen på.
 -- 
 Mvh. Kim Ludvigsen
 Ryd op i dine højrekliksmenuer med Mmm Free.
http://kimludvigsen.dk |  |  | 
  Michael Zedeler (24-09-2006) 
 
	
          | |  | Kommentar Fra : Michael Zedeler
 | 
 Dato :  24-09-06 18:08
 | 
 |  | 
 
            Kim Ludvigsen wrote:
 > Jeg skal lave et opslag i en MySQL-database for at tælle, hvor mange 
 > forekomster der er af hver værdi i de enkelte felter.
 > 
 > Jeg har 28 felter med 5 mulige værdier i hver, og jeg skal have lavet en 
 > liste i stil med dette:
 > 
 > Felt 1
 > værdi 1: 5 forekomster
 > værdi 2: 1 forekomst
 > værdi 3: 3 forekomster
 > værdi 4: 2 forekomster
 > værdi 5: 1 forekomst
 > 
 > Felt 2
 > Værdi 1: 1 forekomst
 > osv.
 > 
 > Jeg går ud fra, at det er nemmest/bedst at hente samtlige oplysninger ud 
 > af databasen på én gang og så lade php finde tallene i stedet for at 
 > foretage 28 opslag i databasen. Men hvordan gør jeg?
 Det kommer meget an på hvilken version af mysql, du har til rådighed. 
 Hvis du har version 5.x, kan det meste ordnes med en enkelt forespørgsel 
 - uden at skulle lave efterbehandling i PHP.
 Ellers er det muligvis bare at hente hele tabellen ud og køre den 
 igennem et PHP-script, som tæller forekomster.
 Mvh. Michael.
 -- 
 Which is more dangerous? TV guided missiles or TV guided families?
 I am less likely to answer usenet postings by anonymous authors.
 Visit my home page at http://michael.zedeler.dk/ |  |  | 
  Kim Ludvigsen (24-09-2006) 
 
	
          | |  | Kommentar Fra : Kim Ludvigsen
 | 
 Dato :  24-09-06 18:29
 | 
 |  | 
 
            Den 24-09-06 19.08 skrev Michael Zedeler følgende:
 > Det kommer meget an på hvilken version af mysql, du har til rådighed. 
 > Hvis du har version 5.x, kan det meste ordnes med en enkelt forespørgsel 
 > - uden at skulle lave efterbehandling i PHP.
 Det lyder fint, det er version 5.0.24.
 -- 
 Mvh. Kim Ludvigsen
 Judas: Udtryk for en homoseksuel mand...
http://ordforklaring.dk/ordforklaring.php?forklaring=judas |  |  | 
   Michael Zedeler (24-09-2006) 
 
	
          | |  | Kommentar Fra : Michael Zedeler
 | 
 Dato :  24-09-06 19:31
 | 
 |  | 
 
            Kim Ludvigsen wrote:
 > Den 24-09-06 19.08 skrev Michael Zedeler følgende:
 > 
 >> Det kommer meget an på hvilken version af mysql, du har til rådighed. 
 >> Hvis du har version 5.x, kan det meste ordnes med en enkelt 
 >> forespørgsel - uden at skulle lave efterbehandling i PHP.
 > 
 > Det lyder fint, det er version 5.0.24.
 Sådan en har jeg ikke, så dette her er ikke checket imod en rigtig database:
 SELECT COUNT(*), 'felt1' FROM (SELECT DISTINCT felt1 FROM mintabel)
 UNION
 SELECT COUNT(*), 'felt2' FROM (SELECT DISTINCT felt2 FROM mintabel)
 ....
 Jeg er ikke sikker på at det vil virke, men prøv det en gang. Hvis der 
 er problemer, så prøv
 SELECT COUNT(*), 'felt1' FROM (SELECT DISTINCT felt1 FROM mintabel)
 og se om det virker.
 Mvh. Michael.
 -- 
 Which is more dangerous? TV guided missiles or TV guided families?
 I am less likely to answer usenet postings by anonymous authors.
 Visit my home page at http://michael.zedeler.dk/ |  |  | 
    Kim Ludvigsen (24-09-2006) 
 
	
          | |  | Kommentar Fra : Kim Ludvigsen
 | 
 Dato :  24-09-06 20:21
 | 
 |  | 
 
            Den 24-09-06 20.31 skrev Michael Zedeler følgende:
 > Jeg er ikke sikker på at det vil virke, men prøv det en gang. Hvis der 
 > er problemer, så prøv
 > 
 > SELECT COUNT(*), 'felt1' FROM (SELECT DISTINCT felt1 FROM mintabel)
 Jeg får en Error 1248 (42000): Every derived table must have it's own alias.
 -- 
 Mvh. Kim Ludvigsen
 Rustvogn: En bil, der er godt angrebet af rust i såvel undervogn som i 
 de bærende dele af karosseriet...
http://ordforklaring.dk/ordforklaring.php?forklaring=rustvogn |  |  | 
     Michael Zedeler (24-09-2006) 
 
	
          | |  | Kommentar Fra : Michael Zedeler
 | 
 Dato :  24-09-06 21:55
 | 
 |  | 
 
            Kim Ludvigsen wrote:
 > Den 24-09-06 20.31 skrev Michael Zedeler følgende:
 > 
 >> Jeg er ikke sikker på at det vil virke, men prøv det en gang. Hvis der 
 >> er problemer, så prøv
 >>
 >> SELECT COUNT(*), 'felt1' FROM (SELECT DISTINCT felt1 FROM mintabel)
 > 
 > Jeg får en Error 1248 (42000): Every derived table must have it's own 
 > alias.
 Hmmmn. Ja. Sådan løste jeg det:
http://www.google.dk/search?q=Every+derived+table+must+have+it%27s+own+alias Klikker første link og genfinder fejlbeskeden længere nede med en 
 beskrivelse af hvordan man løser den.
 Det bliver til
 SELECT COUNT(*), 'felt1' FROM (
    SELECT DISTINCT felt1 FROM mintabel) AS feltresultat1
 Google er din ven.
 Mvh. Michael.
 -- 
 Which is more dangerous? TV guided missiles or TV guided families?
 I am less likely to answer usenet postings by anonymous authors.
 Visit my home page at http://michael.zedeler.dk/ |  |  | 
      Peter Brodersen (25-09-2006) 
 
	
          | |  | Kommentar Fra : Peter Brodersen
 | 
 Dato :  25-09-06 00:29
 | 
 |  | On Sun, 24 Sep 2006 22:55:08 +0200, Michael Zedeler
 <michael@zedeler.dk> wrote:
 
 >SELECT COUNT(*), 'felt1' FROM (
 >   SELECT DISTINCT felt1 FROM mintabel) AS feltresultat1
 >
 >Google er din ven.
 
 Hvis der ikke forekommer NULL-værdier, så kan man evt. klare sig med
 følgende:
 
 SELECT COUNT(DISTINCT felt1), 'felt1' FROM mintabel
 
 
 COUNT(felt) tæller ikke felter med værdien NULL med, mens COUNT(*)
 tæller enhver række med.
 
 --
 - Peter Brodersen
 Hvis ens primære argumentationsform er "Definér (udsagn)!", så
 bør man overveje, om man reelt bidrager med noget til nettet
 
 
 |  |  | 
      Kim Ludvigsen (25-09-2006) 
 
	
          | |  | Kommentar Fra : Kim Ludvigsen
 | 
 Dato :  25-09-06 12:37
 | 
 |  | 
 
            Den 24-09-06 22.55 skrev Michael Zedeler følgende:
 > SELECT COUNT(*), 'felt1' FROM (
 >     SELECT DISTINCT felt1 FROM mintabel) AS feltresultat1
 Jeg er så meget begynder, at jeg ikke forstår, hvordan jeg skal bruge 
 ovenstående. Jeg må nok strække våben og simpelthen bruge det, jeg kan 
 finde ud af, 140 forespørgsler i stil med:
 $query = "SELECT a FROM tabel where a ='værdi1'";
 $result = mysql_query($query);
 $a1 = mysql_num_rows($result);
 $query = "SELECT a FROM tabel where a ='værdi2'";
 $result = mysql_query($query);
 $a2 = mysql_num_rows($result);
 Osv. Heldigvis skal siden med udtrækket ikke bruges ret ofte.
 > Google er din ven.
 Kun hvis man forstår det, der står på siderne    Tak til dig og Peter for forsøget.
 -- 
 Mvh. Kim Ludvigsen
 Spareribs: Buskplante, hvis frugter bruges som tilbehør til maden...
http://ordforklaring.dk/ordforklaring.php?forklaring=spareribs |  |  | 
       Peter Brodersen (25-09-2006) 
 
	
          | |  | Kommentar Fra : Peter Brodersen
 | 
 Dato :  25-09-06 15:49
 | 
 |  | On Mon, 25 Sep 2006 13:36:57 +0200, Kim Ludvigsen
 <usenet@kimludvigsen.dk> wrote:
 
 >$query = "SELECT a FROM tabel where a ='værdi1'";
 >$result = mysql_query($query);
 >$a1 = mysql_num_rows($result);
 
 For det første behøver du ikke at trække al dataen ud. Det kan fylde
 godt op i hukommelsen, hvis du ikke frigiver resultatet bagefter.
 
 $query = "SELECT COUNT(*) FROM tabel where a ='værdi1'";
 $result = mysql_query($query);
 $a1 = mysql_result($result,0);
 
 >$query = "SELECT a FROM tabel where a ='værdi2'";
 >$result = mysql_query($query);
 >$a2 = mysql_num_rows($result);
 >
 >Osv. Heldigvis skal siden med udtrækket ikke bruges ret ofte.
 
 I den opsætning virker det som om, du blot skal have lavet en ordinær
 optælling.
 
 $query = "SELECT COUNT(*) AS antal, a FROM tabel GROUP BY a";
 $result = mysql_query($query);
 while ($row = mysql_num_rows($result)) {
 print $row['a'].": ".$row['antal']."<br />\n";
 }
 
 
 Hvis du i øvrigt er i tvivl, så start med at teste den rene SQL via en
 passende mysql-klient (fx PHPMyAdmin, kommandolinjeklienten, etc.).
 Det er lettere at få overblikket på den måde. Når man både blander PHP
 og MySQL til databehandling, skal man have tungen lige i munden.
 --
 - Peter Brodersen
 Hvis ens primære argumentationsform er "Definér (udsagn)!", så
 bør man overveje, om man reelt bidrager med noget til nettet
 
 
 |  |  | 
        Kim Ludvigsen (25-09-2006) 
 
	
          | |  | Kommentar Fra : Kim Ludvigsen
 | 
 Dato :  25-09-06 17:50
 | 
 |  | 
 
            Den 25-09-06 16.48 skrev Peter Brodersen følgende:
 > On Mon, 25 Sep 2006 13:36:57 +0200, Kim Ludvigsen
 > <usenet@kimludvigsen.dk> wrote:
 > I den opsætning virker det som om, du blot skal have lavet en ordinær
 > optælling.
 Netop, og derfor ledte jeg også efter en nemmere metode end at lave 140 
 forespørgsler.
 > $query = "SELECT COUNT(*) AS antal, a FROM tabel GROUP BY a";
 > $result = mysql_query($query);
 > while ($row = mysql_num_rows($result)) {
 >    print $row['a'].": ".$row['antal']."<br />\n";
 > }
 Ser smart ud, og det virker i konsollen, men i php udskrives resultatet 
 ikke, og løkken køres uendeligt, så jeg blot får en masse linjer med et 
 : på hver.
 -- 
 Mvh. Kim Ludvigsen
 Jetlag: Træthed skabt af ioniserede partikler i de højere luftlag...
http://ordforklaring.dk/ordforklaring.php?forklaring=jetlag |  |  | 
         Kim Ludvigsen (25-09-2006) 
 
	
          | |  | Kommentar Fra : Kim Ludvigsen
 | 
 Dato :  25-09-06 18:36
 | 
 |  | 
 
            Den 25-09-06 18.50 skrev Kim Ludvigsen følgende:
 > Ser smart ud, og det virker i konsollen, men i php udskrives resultatet 
 > ikke, og løkken køres uendeligt, så jeg blot får en masse linjer med et 
 > : på hver.
 Du skal ikke bruge mere tid på det, jeg har udskiftet mine egne 
 forespørgsler med:
 $query = "SELECT COUNT(*) FROM tabel where a ='værdi1'";
 og det virker helt fint.
 Jeg takker for hjælpen.
 -- 
 Mvh. Kim Ludvigsen
 Polterabend: Tysk udtryk for et spøgelse, der larmer om aftenen...
http://ordforklaring.dk/ordforklaring.php?forklaring=polterabend |  |  | 
 |  |