|
| 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 :)
| |
|
|