/ 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
tælle poster i mqsql?
Fra : gc


Dato : 17-09-07 14:35

Jeg vil gerne have antallet af poster i en tabel (kurv) hvor user er = med
$brugernavn
Jeg roder med følgende kode
********************************
$brugernavn = $_SESSION[brugernavn];
echo $brugernavn;
$antalposter = mysql_query("SELECT count(*) FROM kurv WHERE kurv.user=
$brugernavn");
echo $antalposter;
mysql_free_result($antalposter);
********************************
Men $antalposter forbliver tom (der er poster i databasen med samme værdi
som $brugernavn)
og linien mysql_free_result($antalposter) giver en fejl: Warning:
mysql_free_result(): supplied argument is not a valid MySQL result resource
in ... line 42

udskifter jeg "SELECT" linien med:
$antalposter = mysql_query("SELECT count(*) FROM kurv");
returnere $antalposter : Resource id #7
men fejlen i linie 42 forsvinder.

Hvad gør jeg forkert?

På forhånd tak.!



 
 
Peter Brodersen (17-09-2007)
Kommentar
Fra : Peter Brodersen


Dato : 17-09-07 14:48

On Mon, 17 Sep 2007 15:34:35 +0200, "gc" <gertc-slet-@msn.com> wrote:

>Jeg vil gerne have antallet af poster i en tabel (kurv) hvor user er = med
>$brugernavn
>Jeg roder med følgende kode
>********************************
>$brugernavn = $_SESSION[brugernavn];
>echo $brugernavn;
>$antalposter = mysql_query("SELECT count(*) FROM kurv WHERE kurv.user=
>$brugernavn");

Først, hvis brugernavn er et stykke tekst, så skal der '...' rundt om:

$antalposter = mysql_query("SELECT count(*) FROM kurv WHERE kurv.user=
'$brugernavn' ");

>echo $antalposter;
> mysql_free_result($antalposter);

Derudover, mysql_query() giver et samlet resultatsæt som en ressource
(som du fx ser som "Resource id #7"), og ikke bare indholdet af
count(*). Derfor indholder $antalposter her Du skal derefter bruge en
funktion som fx mysql_result på at hente resultater ud. Fx:

$resultat = mysql_query("SELECT count(*) FROM kurv WHERE kurv.user=
'$brugernavn' ");
$antalposter = mysql_result($resultat,0);

>********************************
>Men $antalposter forbliver tom (der er poster i databasen med samme værdi
>som $brugernavn)
>og linien mysql_free_result($antalposter) giver en fejl: Warning:
>mysql_free_result(): supplied argument is not a valid MySQL result resource
>in ... line 42

I første omgang skyldes det, at din SQL-forespørgsel er ugyldig
(hvilket den er med de manglende '...' ). Du forsøger dog at arbejde
videre på dette database-resultat, selv om det ikke eksisterer.

--
- Peter Brodersen
Kendt fra Internet

gc (18-09-2007)
Kommentar
Fra : gc


Dato : 18-09-07 08:13

> $resultat = mysql_query("SELECT count(*) FROM kurv WHERE kurv.user=
> '$brugernavn' ");
> $antalposter = mysql_result($resultat,0);

Jeg havde faktisk googlet mig frem noget ligende men det virkede heller
ikke,
selvfølgelig fordi jeg mangler '...'

> I første omgang skyldes det, at din SQL-forespørgsel er ugyldig
> (hvilket den er med de manglende '...' ). Du forsøger dog at arbejde
> videre på dette database-resultat, selv om det ikke eksisterer.

Det virker perfekt nu, mange tak for hjælpen.

/Gert




Philip Nunnegaard (17-09-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 17-09-07 17:21

> $brugernavn = $_SESSION[brugernavn];
> echo $brugernavn;
> $antalposter = mysql_query("SELECT count(*) FROM kurv WHERE kurv.user=
> $brugernavn");
> echo $antalposter;
> mysql_free_result($antalposter);

Jeg plejer at bruge dette:
$sql = "select id from kurv where user='".$brugernavn."'";
$result = mysql_query($sql);
$antalposter = mysql_num_rows($result);

Jeg tager kun én kolonne fra tabellen, da der ikke er nogen grund til at
hente alle, når der kun skal tælles poster.
Jeg definere $sql først og eksekverer så denne bagefter.
Det giver mig mulighed for ved evt. fejl at indsætte et echo $sql; for at se
sql-outputtet.


Martin (17-09-2007)
Kommentar
Fra : Martin


Dato : 17-09-07 17:37

Philip Nunnegaard wrote:
>> $brugernavn = $_SESSION[brugernavn];
>> echo $brugernavn;
>> $antalposter = mysql_query("SELECT count(*) FROM kurv WHERE kurv.user=
>> $brugernavn");
>> echo $antalposter;
>> mysql_free_result($antalposter);
>
> Jeg plejer at bruge dette:
> $sql = "select id from kurv where user='".$brugernavn."'";
> $result = mysql_query($sql);
> $antalposter = mysql_num_rows($result);

Jeg plejer nu bare at skrive

echo $sql->count('table','user = "'.$brugernavn.'");
:)

Så har jeg selvfølgelig et hieraki af klasser til at styre min database :)

Philip Nunnegaard (17-09-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 17-09-07 18:02

> Jeg plejer nu bare at skrive
>
> echo $sql->count('table','user = "'.$brugernavn.'");

Det er så til gengæld sort snak for mig. :-/


Martin (18-09-2007)
Kommentar
Fra : Martin


Dato : 18-09-07 08:33

Philip Nunnegaard wrote:
>> Jeg plejer nu bare at skrive
>>
>> echo $sql->count('table','user = "'.$brugernavn.'");
>
> Det er så til gengæld sort snak for mig. :-/

Hvad er nemmest at læse og forstå for den sags skyld

echo mysql_result(mysql_query("SELECT COUNT(*) FROM table WHERE user =
'".$brugernavn."'));

eller

$sql = new DB;
echo $sql->count('table','user = "'.$brugernavn.'"');

Det eneste $sql->count metoden gør er at returne hele den lange
mysql_result, dog med et par små ting og sager, som gør livet meget lettere

Philip Nunnegaard (19-09-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 19-09-07 16:59

> Hvad er nemmest at læse og forstå for den sags skyld
> (...)
> echo $sql->count('table','user = "'.$brugernavn.'"');

Ikke andet, end jeg ikke kendte dén syntaks.


Martin (21-09-2007)
Kommentar
Fra : Martin


Dato : 21-09-07 13:26

Philip Nunnegaard wrote:
>> Hvad er nemmest at læse og forstå for den sags skyld
>> (...)
>> echo $sql->count('table','user = "'.$brugernavn.'"');
>
> Ikke andet, end jeg ikke kendte dén syntaks.

Det er nu heller ikke en "officiel" syntax, men bare et lille uddrag af
hvordan man bruger klasser

Michael Zedeler (17-09-2007)
Kommentar
Fra : Michael Zedeler


Dato : 17-09-07 22:58

Philip Nunnegaard wrote:
>> $brugernavn = $_SESSION[brugernavn];
>> echo $brugernavn;
>> $antalposter = mysql_query("SELECT count(*) FROM kurv WHERE kurv.user=
>> $brugernavn");
>> echo $antalposter;
>> mysql_free_result($antalposter);
>
> Jeg plejer at bruge dette:
> $sql = "select id from kurv where user='".$brugernavn."'";
> $result = mysql_query($sql);
> $antalposter = mysql_num_rows($result);
>
> Jeg tager kun én kolonne fra tabellen, da der ikke er nogen grund til at
> hente alle, når der kun skal tælles poster.

Ovenstående er ikke nogen god idé, da man får hældt en masse data over i
php, som man derefter straks smider væk. Se Peter brodersens indlæg for
den autoriserede måde at gøre det på.

Mvh. Michael.

P.s. mange databasedrivere giver slet ikke mulighed for at få at vide
hvor mange rækker, der er i et resultatsæt, hvilket betyder at man først
kender antallet når man har spolet alle rækkerne igennem.

Martin (21-09-2007)
Kommentar
Fra : Martin


Dato : 21-09-07 13:29

Michael Zedeler wrote:
> P.s. mange databasedrivere giver slet ikke mulighed for at få at vide
> hvor mange rækker, der er i et resultatsæt, hvilket betyder at man først
> kender antallet når man har spolet alle rækkerne igennem.

COUNT er nu ellers en standard SQL

Peter Brodersen (21-09-2007)
Kommentar
Fra : Peter Brodersen


Dato : 21-09-07 14:45

On Fri, 21 Sep 2007 14:28:30 +0200, Martin <maaNO@SPAMscandesigns.dk>
wrote:

>> P.s. mange databasedrivere giver slet ikke mulighed for at få at vide
>> hvor mange rækker, der er i et resultatsæt, hvilket betyder at man først
>> kender antallet når man har spolet alle rækkerne igennem.
>
>COUNT er nu ellers en standard SQL

Yep, men Michael kommenterer konstruktionen at hive en lang mængde
rækker ud, og så blot tælle antallet af rækker i resultatet, frem for
at hive et resultat ud med én række (en COUNT()-værdi).

Det er der rigtigt nok sjældent nogen grund til at gøre, hvis man blot
vil have antallet.


--
- Peter Brodersen
Kendt fra Internet

Martin (21-09-2007)
Kommentar
Fra : Martin


Dato : 21-09-07 15:31

Peter Brodersen wrote:
> On Fri, 21 Sep 2007 14:28:30 +0200, Martin <maaNO@SPAMscandesigns.dk>
> wrote:
>
>>> P.s. mange databasedrivere giver slet ikke mulighed for at få at vide
>>> hvor mange rækker, der er i et resultatsæt, hvilket betyder at man først
>>> kender antallet når man har spolet alle rækkerne igennem.
>> COUNT er nu ellers en standard SQL
>
> Yep, men Michael kommenterer konstruktionen at hive en lang mængde
> rækker ud, og så blot tælle antallet af rækker i resultatet, frem for
> at hive et resultat ud med én række (en COUNT()-værdi).
>
> Det er der rigtigt nok sjældent nogen grund til at gøre, hvis man blot
> vil have antallet.

Wups.. kan jeg godt læse nu :)

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408509
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste