/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Array_sum fra mySQL
Fra : Stig Sørensen


Dato : 01-02-08 06:58

Hej gruppe.

I min mySQL tabel, har jeg en kolonne 'rating' indeholdende tal fra 1
til 10.
Jeg vil gerne hive alle rækker ud fra 'rating' og få et sum af dette.
Sum skal så divideres af antal rækker der er.

$hent_rating = mysql_query("SELECT * from phpbb_garage,
phpbb_garage_rating WHERE phpbb_garage.id = $id AND
phpbb_garage_rating.garage_id = $id");
while($row = mysql_fetch_assoc($hent_rating))

{

$ratingsum = array($row['rating']);
echo array_sum($ratingsum);
}


Som blot outputter samtlige rækker (81088810810771010).

På php.net bliver det vist, at array_sm skal bruges således:
$a = array(2, 4, 6, 8);

Hvor mit er:

$a = array(x);

Så hvordan får jeg det til at være:

$a = array($row['rating'], $row['rating'], $row['rating']... etc);
?


Håber nogen kan kaste lidt lys over det ;)

 
 
Johan Holst Nielsen (01-02-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 01-02-08 15:24

Stig Sørensen wrote:
> Hej gruppe.
>
> I min mySQL tabel, har jeg en kolonne 'rating' indeholdende tal fra 1
> til 10.
> Jeg vil gerne hive alle rækker ud fra 'rating' og få et sum af dette.
> Sum skal så divideres af antal rækker der er.
>
> $hent_rating = mysql_query("SELECT * from phpbb_garage,
> phpbb_garage_rating WHERE phpbb_garage.id = $id AND
> phpbb_garage_rating.garage_id = $id");
> while($row = mysql_fetch_assoc($hent_rating))
>
> {
>
> $ratingsum = array($row['rating']);
> echo array_sum($ratingsum);
> }
>
>
> Som blot outputter samtlige rækker (81088810810771010).
>
> På php.net bliver det vist, at array_sm skal bruges således:
> $a = array(2, 4, 6, 8);
>
> Hvor mit er:
>
> $a = array(x);
>
> Så hvordan får jeg det til at være:
>
> $a = array($row['rating'], $row['rating'], $row['rating']... etc);

brug blot...

$hent_rating = mysql_query("SELECT
SUM(php_garage_rating.rating)/COUNT(php_garage_rating.rating) as rt FROM
phpbb_garage, php_garage_rating WHERE phpbb_garage.id = $id AND
phpbb_garage_rating.garage_id = $id");
$r = mysql_fetch_row($hent_rating);

echo $r['rt'];

BEMÆRK - grunden til at du måske får samtlige rækker som sådanne tal kan
være fordi din type er f.eks. VARCHAR i databasen - prøv at lave den om
til en integer type (tinyint f.eks.)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Johan Holst Nielsen (01-02-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 01-02-08 15:25

Johan Holst Nielsen wrote:
> $hent_rating = mysql_query("SELECT
> SUM(php_garage_rating.rating)/COUNT(php_garage_rating.rating) as rt FROM
> phpbb_garage, php_garage_rating WHERE phpbb_garage.id = $id AND
> phpbb_garage_rating.garage_id = $id");
> $r = mysql_fetch_row($hent_rating);

Doh - skulle være $r = mysql_fetch_ASSOC($hent_rating);

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

N/A (01-02-2008)
Kommentar
Fra : N/A


Dato : 01-02-08 19:38



N/A (01-02-2008)
Kommentar
Fra : N/A


Dato : 01-02-08 19:38



Stig Sørensen (01-02-2008)
Kommentar
Fra : Stig Sørensen


Dato : 01-02-08 09:44

On 1 Feb., 15:25, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> Johan Holst Nielsen wrote:
> > $hent_rating = mysql_query("SELECT
> > SUM(php_garage_rating.rating)/COUNT(php_garage_rating.rating) as rt FROM
> > phpbb_garage, php_garage_rating WHERE phpbb_garage.id = $id AND
> > phpbb_garage_rating.garage_id = $id");
> > $r = mysql_fetch_row($hent_rating);
>
> Doh - skulle være $r = mysql_fetch_ASSOC($hent_rating);
>
> --
> Johan Holst Nielsen
> Freelance PHP Developer -http://phpgeek.dk


Jeg Johan og tak for din hjælp. (Ikke første gang du har hjulpet mig i
denne gruppe (o: )

Hvis jeg i phpMyadmin kører denne SQL forespørgelse:

SELECT SUM(phpbb_garage_rating.rating)/
COUNT(phpbb_garage_rating.rating) as rt FROM phpbb_garage,
phpbb_garage_rating WHERE phpbb_garage.id = $id AND
phpbb_garage_rating.garage_id = $id

($id udskiftet med et tal)
Så giver den det eftersøgte resultat. En kolonne "rt" med et
gennemsnit tal.

Men hvordan outputter jeg det på min php side?

Jeg har følgende:

$hent_rating = mysql_query("SELECT SUM(phpbb_garage_rating.rating)/
COUNT(phpbb_garage_rating.rating) as rt FROM phpbb_garage,
phpbb_garage_rating WHERE phpbb_garage.id = $id AND
phpbb_garage_rating.garage_id = $id");
$r = mysql_fetch_assoc($hent_rating);

Men hvad så?
Har så efterfølgende tilføjet ( i forskellige kombinationer)

echo $r;
echo $rt;
echo $row['rt'];

Desuden tilføjet klemmer { } rundt om.

Men intet giver noget output.

Hvad gør jeg?


På forhånd tak, og god weekend ;)

Johan Holst Nielsen (01-02-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 01-02-08 18:31

Stig Sørensen wrote:
> $hent_rating = mysql_query("SELECT SUM(phpbb_garage_rating.rating)/
> COUNT(phpbb_garage_rating.rating) as rt FROM phpbb_garage,
> phpbb_garage_rating WHERE phpbb_garage.id = $id AND
> phpbb_garage_rating.garage_id = $id");
> $r = mysql_fetch_assoc($hent_rating);
>
> Men hvad så?
> Har så efterfølgende tilføjet ( i forskellige kombinationer)
>
> echo $r;
> echo $rt;
> echo $row['rt'];
>
> Desuden tilføjet klemmer { } rundt om.
>
> Men intet giver noget output.


Hehe - en af de eneste du ikke har prøvet ;)

echo $r['rt'];


--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

N/A (01-02-2008)
Kommentar
Fra : N/A


Dato : 01-02-08 18:31



Stig Sørensen (01-02-2008)
Kommentar
Fra : Stig Sørensen


Dato : 01-02-08 11:15

On 1 Feb., 18:31, Johan Holst Nielsen <s...@phpgeek.dk> wrote:

> Hehe - en af de eneste du ikke har prøvet ;)
>
> echo $r['rt'];
>
> --
> Johan Holst Nielsen
> Freelance PHP Developer -http://phpgeek.dk

Ja naturligvis, tusinde tak igen Johan.

Lidt OT spørgsmål, hvis det er i orden.

Ved mange af mine SQL spørgelser har jeg følgende efter:

while($row = mysql_fetch_assoc($query_vis_nyhed))

feks:

$query_vis_nyhed = mysql_query("SELECT *, DATE_FORMAT(tid, '%d.%m.%Y -
kl: %H:%i') AS tid from nyheder WHERE id = '".$_GET['id']."'");
while($row = mysql_fetch_assoc($query_vis_nyhed))
{

Grunden til at der i min rating-script, længere oppe, ikke er while
indbundet, er det fordi der alligevel kun er én række vi skal have
hævet ud?
Bare så jeg har forstået det korrekt ;)


Rigtig god weekend.

Johan Holst Nielsen (01-02-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 01-02-08 19:38

Stig Sørensen wrote:
> Ja naturligvis, tusinde tak igen Johan.

Det var så lidt... iøvrigt kom jeg til at kigge lidt på forspørgslen med
friske øjne - og underede mig lidt...

tjek lige om du ikke kan skifte

SELECT SUM(php_garage_rating.rating)/COUNT(php_garage_rating.rating) as
rt FROM phpbb_garage, php_garage_rating WHERE phpbb_garage.id = $id AND
phpbb_garage_rating.garage_id = $id

ud med
SELECT SUM(rating)/COUNT(rating) as rt FROM php_garage_rating WHERE
phpbb_garage_rating.garage_id = $id

Så vidt jeg kan se bruger du slet ikke data fra phpbb_garage

> Lidt OT spørgsmål, hvis det er i orden.
>
> Ved mange af mine SQL spørgelser har jeg følgende efter:
>
> while($row = mysql_fetch_assoc($query_vis_nyhed))
>
> feks:
>
> $query_vis_nyhed = mysql_query("SELECT *, DATE_FORMAT(tid, '%d.%m.%Y -
> kl: %H:%i') AS tid from nyheder WHERE id = '".$_GET['id']."'");
> while($row = mysql_fetch_assoc($query_vis_nyhed))
> {
>
> Grunden til at der i min rating-script, længere oppe, ikke er while
> indbundet, er det fordi der alligevel kun er én række vi skal have
> hævet ud?
> Bare så jeg har forstået det korrekt ;)

Ja - det er helt korrekt - while kører indtil condition returnerer
false... Derfor vil while løkken stoppe når der ikke er flere rows
tilbage at hælde ud af requested (da mysql_fetch_* returner false når
der ikke er flere rows tilbage).

Reelt set kan du dog sagnes bruge (når der blot er en enkelt felt eller
2 der skal hives ud) mysql_result - det er dog en dårlig vane (imho) med
mindre man har rimelig styr på det :)

Så generelt - brug mysql_fetch_assoc - alternativt mysql_fetch_row (som
dog gør koden mindre læselig).

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Stig Sørensen (01-02-2008)
Kommentar
Fra : Stig Sørensen


Dato : 01-02-08 11:49

On 1 Feb., 19:38, Johan Holst Nielsen <s...@phpgeek.dk> wrote:

[snip - kode]

> Så vidt jeg kan se bruger du slet ikke data fra phpbb_garage

Det er godt set
Takker.

> Ja - det er helt korrekt - while kører indtil condition returnerer
> false... Derfor vil while løkken stoppe når der ikke er flere rows
> tilbage at hælde ud af requested (da mysql_fetch_* returner false når
> der ikke er flere rows tilbage).
>
> Reelt set kan du dog sagnes bruge (når der blot er en enkelt felt eller
> 2 der skal hives ud) mysql_result - det er dog en dårlig vane (imho) med
> mindre man har rimelig styr på det :)
>
> Så generelt - brug mysql_fetch_assoc - alternativt mysql_fetch_row (som
> dog gør koden mindre læselig).


Takker for uddybelsen.
Jeg har brugt mysql_fetch_assoc indtil videre, så det er jo bare
super :)


Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408191
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste