Avatar billede pluth Nybegynder
15. august 2010 - 21:23 Der er 23 kommentarer og
1 løsning

Count problem

Hej eksperter,

Jeg kan ikke få nedenstående kode til at give mig antallet i hver celle. (Count[0]) Det er kun den nederste række der giver et resultat. Kan i hjælpe ??

$tsql = "SELECT * FROM tbl where dt > '$idag' and customer_id = '$customerid' order by id";
$stmt = sqlsrv_query( $conn, $tsql);

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) {

// Antal emner tilbage
$result = sqlsrv_query($conn, "SELECT count(*) FROM tbl_c where customer_id = '$customerid' and cam = '".$row["id"]."'");
$count = sqlsrv_fetch($result);

    Print ("<tr><td><a href=\"d.php?p=".$row["id"]."\">".$row["name"]."</a></td>");
    Print ("<td>0</td><td>0</td><td>$count[0]</td><td>0</td>");
}
Print ("</tr></table>");
}
Avatar billede pluth Nybegynder
15. august 2010 - 21:33 #1
Skulle være

$tsql = "SELECT * FROM tbl where dt > '$idag' and customer_id = '$customerid' order by id";
$stmt = sqlsrv_query( $conn, $tsql);

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) {

// Antal emner tilbage
$result = sqlsrv_query($conn, "SELECT count(*) FROM tbl_c where customer_id = '$customerid' and cam = '".$row["id"]."'");
$count = sqlsrv_fetch_array($result);

    Print ("<tr><td><a href=\"d.php?p=".$row["id"]."\">".$row["name"]."</a></td>");
    Print ("<td>0</td><td>0</td><td>$count[0]</td><td>0</td>");
}
Print ("</tr></table>");
}
Avatar billede Syska Mester
15. august 2010 - 22:00 #2
Din sql ser rigtig ud eller får du en fejl ?

Sikker på det ikke er PHP der er problemet her? Nu er det ved at være en del år siden jeg sidst har leget med det.

Men hvad mener du også med, at det kun er den sidste rækker den giver det rigtige resultat? Din count bliver jo kørt for hvert gennemløb, og så giver den jo det antal som der er ... vel og mærket det samme hvis $row["id"] også er det samme.

mvh
Avatar billede pluth Nybegynder
15. august 2010 - 22:09 #3
Alle på nær den nederste er blank. Den nederste giver det korrekte antal. Og ja, jeg løber dem igennem en af gangen og counter den. Kan heller ikke se hvad der er galt, men blanke er de
Avatar billede Syska Mester
15. august 2010 - 22:13 #4
Print din sql sætning ud så ... inde i din app, så du kan se den på dine hjemmeside eller sæt et break point ( hvis du har opsæt et udviklings miljø til det ), da din SQL jo må være forkert på en eller anden måde.

Derefter kan du så kører dem i SSMS og se hvad resultat du får der.

En count bør aldrig kunne være blank, da den jo så bare vil count 0 ...

mvh
Avatar billede pluth Nybegynder
15. august 2010 - 22:17 #5
Jeg skulle have slået mere fejlinformation til, for at få lidt infp. Jeg får denne fejl for hver count

Warning: sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given.

Men forstår ikke hvad der mener.
Avatar billede Syska Mester
15. august 2010 - 22:21 #6
Hvad hvis du navn giver din columns ved navn.

"SELECT count(*) AS SomeCount FROM ... "
Avatar billede Syska Mester
15. august 2010 - 22:23 #7
Måske ... uden at være sikker, 0 i php er vist også set som en bool, derfor tror jeg ikke du må skrive 0 ... og ja, du kan måske slet ikke tilgå dens value via index, men prøv at navngiv din column.

"SELECT count(*) AS SomeCount FROM ... "
og
$count["SomeCount"]

Måske ... kun en ide.
Avatar billede pluth Nybegynder
15. august 2010 - 22:27 #8
Det giver desværre samme fejl:(

Warning: sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given
Avatar billede Syska Mester
15. august 2010 - 22:55 #9
Sikker på du ikke har brugt $result tidligere så ?

lav lidt unik renaming:

$result123456 = sqlsrv_query($conn, "SELECT count(*) .....

Det er det eneste den siger tyder på ... ellers er jeg lidt blank.

mvh
Avatar billede crazysnap Seniormester
15. august 2010 - 23:05 #10
Hej pluth,

Har du søgt lidt på fejl-beskeden? Google fandt som første hit denne tråd:

http://www.experts-exchange.com/Programming/Languages/SQL_Syntax/Q_24072264.html

Hvor der er en som døjer med samme problem. Folk mente i tråden problemet lå i Where-statementet, altså din:

where customer_id = '$customerid' and cam = '".$row["id"]."'");

Har du måske prøvet?:

where customer_id = '".$customerid."' and cam = '".$row["id"]."'");

Løsningen i den tråd jeg linker til var faktisk at hans DB Column (dit customer_id eller cam) var defineret som text i stedet for en varchar. Men prøv at læs den og se om den kan give dig svaret (jeg kender desværre ikke meget til PHP, men blev nysgerrig alligevel og søgte derfor på fejlbeskseden).

Mvh.
CS
Avatar billede pluth Nybegynder
16. august 2010 - 08:24 #11
Jeg har kigget på det, men synes ikke rigtig det giver et svar jeg kan bruge.

Hvis jeg på $count = sqlsrv_fetch_array($result); tilføjer  or die(print_r(sqlsrv_errors())); kommer følgende fejl

Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [code] => -14 [2] => An invalid parameter was passed to sqlsrv_fetch_array. [message] => An invalid parameter was passed to sqlsrv_fetch_array. ) ) 1

Nogen som har et bud på hvad det kan skyldes ?
Avatar billede Syska Mester
16. august 2010 - 08:34 #12
Måske ...

Hvad er typen for customer_id og cam ?
Avatar billede pluth Nybegynder
16. august 2010 - 11:27 #13
Hej,

Beklager den lange svartid, men var ikke ved maskinen. Begge felter er uniqueidentifier
Avatar billede Syska Mester
16. august 2010 - 11:37 #14
Prøv nu at udskriv din SQL statement i din app for at se om den er korrekt, og derefter kør den inde i SSMS( Sql Server Management Studio ) eller hvad du nu bruger

Der må være en fejl ... lidt svært at prøve for os da vi ikke har dit setup :-)

mvh
Avatar billede pluth Nybegynder
16. august 2010 - 11:59 #15
Der kommer ikke nogen fejl, andet end det skrevet ovenfor. Nu har jeg prøvet at skrive nedenstående, men det giver præcis det samme resultat :(

Warning: sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given in

$tsql = "SELECT * FROM tbl";
$stmt = sqlsrv_query( $conn, $tsql);

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) {

// Antal emner tilbage
$result = sqlsrv_query($conn, "SELECT count(*) FROM tbl_c");
$count = sqlsrv_fetch_array($result);

    Print ("<tr><td><a href=\"d.php?p=".$row["id"]."\">".$row["name"]."</a></td>");
    Print ("<td>0</td><td>0</td><td>$count[0]</td><td>0</td>");
}
Print ("</tr></table>");
}
Avatar billede pluth Nybegynder
16. august 2010 - 13:08 #16
Det er nok mere et php problem end et SQL. Jeg flytter opgaven til PHP istedet.
Avatar billede Syska Mester
16. august 2010 - 14:21 #17
http://www.experts-exchange.com/Programming/Languages/SQL_Syntax/Q_24072264.html

Så siger han der er problemer med "text", men du siger du bruger unique identifier.

Så begynder jeg at tænke, er det muligt du kan prøve at ændre din column til andet end unique identifier ?
Avatar billede Syska Mester
16. august 2010 - 14:23 #18
http://social.msdn.microsoft.com/Forums/en-US/sqldriverforphp/thread/c0236ed1-c6af-4925-af1d-e67f5b61f44b

Der er også noget der henleder min tanke på om UI har et par problemer ...
Avatar billede pluth Nybegynder
16. august 2010 - 15:11 #19
Jeg har fået det til at virke nu - Der kom et svar i en anden tråd. Mange tak for din indsats. Smid et svar og pointene er dine
Avatar billede Syska Mester
16. august 2010 - 15:25 #20
Hvad blev løsningen? Måske jeg kan finde den i php kategorien :-)
Avatar billede Syska Mester
16. august 2010 - 15:29 #21
OMG, læste lige løsningen i den anden tråd.

Havde godt tænkt over det med at du brugte samme connection, men pga fejlen php smid, gik jeg væk fra den ide igen.

Det må være dagens mindst sigende fejl ... OMG.

mvh
Avatar billede pluth Nybegynder
16. august 2010 - 15:46 #22
Ja, det var en meget underlig fejl i forhold til løsningen.. Men jeg er glad bare det virker :)

Endnu engang tak for hjælpen
Avatar billede Syska Mester
16. august 2010 - 15:58 #23
Som ham i den anden tråd skrev, så skal du nok kigge på lidt join, for at optimere det hele.

mvh
Avatar billede pluth Nybegynder
16. august 2010 - 20:22 #24
Ja, det vil jeg gøre med det samme.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester