webForumDet fria alternativet

COUNT(*) ger Resource id #2. Varför? Vad?

8 svar · 414 visningar · startad av leancuisine

leancuisineMedlem sedan jan. 2002160 inlägg
#1
$query_idag = "SELECT COUNT(*) FROM annonser WHERE datum='2002-09-12'";

$result_idag = mysql_query($query_idag);
echo $result_idag;

Den här koden ger resultatet
Resource id #2

Jag fattar inte varför. Har någon något tips? Vad gör jag för fel? Det borde bli 2, eftersom det finns två poster med det datumet i databasen. Datumformatet i databasen är exakt som det är skrivet i queryn...

:( deppad...

leancuisineMedlem sedan jan. 2002160 inlägg
#2

Queryn ger rätt resultat när jag kör den direkt i terminalen:

mysql> SELECT COUNT(*) FROM annonser WHERE datum='2002-09-12';
+----------+
| COUNT(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

mysql>

fattar nada...

MatteMedlem sedan aug. 20002 975 inlägg
#3

För att få fram värdet får du göra så här:

$query_idag = "SELECT COUNT(*) FROM annonser WHERE datum='2002-09-12'";

$result_idag = mysql_query($query_idag);

echo mysql_result($result_idag, 0);

Alternativt:

$query_idag = "SELECT COUNT(*) AS poster FROM annonser WHERE datum='2002-09-12'";

$result_idag = mysql_query($query_idag);

$row = mysql_fetch_array($result_idag);

echo $row['poster'];

mysql_query() ger alltså inte svaret direkt utan du måste plocka fram det på annat sätt.

leancuisineMedlem sedan jan. 2002160 inlägg
#4

Supertack!!!

WebslaveMedlem sedan maj 2002647 inlägg
#5

Annars kan man alltid köra mysql_num_rows:

$query_idag = "SELECT * FROM annonser WHERE datum='2002-09-12'";

$result_idag = mysql_query($query_idag);

$row = mysql_num_rows($result_idag);

echo $row;
bohlinMedlem sedan mars 2000263 inlägg
#6

Att köra med mysql_num_rows är inte att rekomendera. Databasen tvingas jobba massa i onödan. Kör man en select * så hämtar man all data från tabellen i onödan, man ville ju endast ha antal poster i tabellen.

PicklezzMedlem sedan jan. 2002414 inlägg
#7

ja men om man ändå skall hämta ut alla så kan man ju använda sig av den för att slippa köra två frågor mot databasen

WebslaveMedlem sedan maj 2002647 inlägg
#8

Den jobbar väll inte mer än om man använder SELECT COUNT (*)... måste ju fortfarande kolla igenom alla rader.

Kanske blir mindre belastning om man tar:

$query_idag = "SELECT datum FROM annonser WHERE datum='2002-09-12'";

$result_idag = mysql_query($query_idag);

$row = mysql_num_rows($result_idag);

echo $row;

Men inte vet jag... jag är en newbie ;)

leancuisineMedlem sedan jan. 2002160 inlägg
#9

Jag är inte man nog att döma vad som är rätt generellt sett, men i det här fallet är det en annonssida som hämtar alla annonser (oavsett datum) men överst också meddelar hur många som är nya för idag. Outputen blir typ:

100 annonser på annonsmarknaden. 15 nya för idag. Därför körde jag 'SELECT COUNT (*)...' på den query som kollade efter dagens datum och en vanlig 'SELECT *...' där jag hämtar annonser som sedan skrivs ut rad för rad...

om ni undrar så är datumet inte statiskt i den egentliga applikationen som i min kod ovan, utan jag körde det så igår medan jag löste det andra problemet som jag inte kunde lösa...

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)