Gå till innehåll
Just nu i M3-nätverket

skum recordset?


osvaldor

Rekommendera Poster

Jag har ställt en fråga i MySQL som jag först har testat i CocoaMySQL för att se att frågan resulterar i det jag vill ha. So far so good. När jag kopierar samma fråga till en php sida, där jag får 3 rader som resultat i CocoaMySQL, så får jag bara ut 2 rader i php... ngn som vet vad det kan bero på? Jag har verkligen kollat så att koden stämmer...

Länk till kommentar
Dela på andra webbplatser

Jag är förvisso också nybörjare i mysql/php men om jag får se koden kanske jag kan hjälpa dig.

Problemet är alltså att jag inte får ut den första raden i recordsetet, inte första raden i databasen utan första raden som ska presenteras.. så här ser koden ut:

 

$open = mysql_connect("localhost", " ", " ");

$query = mysql_db_query("cv", "SELECT DISTINCT log_date,usr_fullName FROM wd_usr_user_tb usr,wd_log_log_tb log WHERE usr.usr_level < 2 AND usr.usr_id = log.usr_id ORDER BY log_date DESC");

$rs = mysql_fetch_array ($query);

 

if (empty($rs)) {

echo "There are no present records.";

mysql_free_result($rs);

mysql_close($open);

} else {

while ($rs = mysql_fetch_array ($query)) {

print $rs["usr_fullName"] . " ";

print $rs["log_date"];

print ("<br>");

}

mysql_free_result($rs);

mysql_close($open);

}

Länk till kommentar
Dela på andra webbplatser

Problemet är alltså att jag inte får ut den första raden i recordsetet, inte första raden i databasen utan första raden som ska presenteras.

Hmm...ta det där en gång till. Menar du att php returnerar alla rader ur tabellen, som svarar på frågan, utom den första raden ?

Länk till kommentar
Dela på andra webbplatser

Problemet är alltså att jag inte får ut den första raden i recordsetet, inte första raden i databasen utan första raden som ska presenteras.

Hmm...ta det där en gång till. Menar du att php returnerar alla rader ur tabellen, som svarar på frågan, utom den första raden ?

japp, jag testar frågan i CocoaMySQL och får ut 4 rader... sen kopierar jag frågan, klistrar in den i php o kör... vad blir resultatet? Jo 3 rader.. och det är första raden i resultatet, inte i databasen, som inte hänger med =(

Länk till kommentar
Dela på andra webbplatser

Hmm...verkar helskumt. Jag kan inte heller hitta några fel i din kod. Är du säker på att du skriver samma fråga i CocoaMySql ? Annars kan du ju slänga ut frågan på www.phportalen.net Där är det tätt mellan riktiga php-proffs i forumen...

Länk till kommentar
Dela på andra webbplatser

Nils Holmlöv
$open = mysql_connect("localhost", " ", " ");

$query = mysql_db_query("cv", "SELECT DISTINCT log_date,usr_fullName FROM wd_usr_user_tb usr,wd_log_log_tb log WHERE usr.usr_level < 2 AND usr.usr_id = log.usr_id ORDER BY log_date DESC");

$rs = mysql_fetch_array ($query);

 

if (empty($rs)) {

echo "There are no present records.";

mysql_free_result($rs);

mysql_close($open);

} else {

while ($rs = mysql_fetch_array ($query)) {

      print $rs["usr_fullName"] . " ";

      print $rs["log_date"];

      print ("<br>");

}

mysql_free_result($rs);

mysql_close($open);

}

Du använder mysql_fetch_array två gånger i koden (markerat i rött). Varje gång du använder den funktionen flyttas pekaren i vektorn (array:en) fram ett snäpp. När du startar din while-loop kommer pekaren att peka på rad två, istället för rad ett.

Länk till kommentar
Dela på andra webbplatser

En annan synpunkt, som förvisso inte har med problemet att göra, är att i villkorssatsen skriver du två rader som ska köras vare sig vilkoret uppfylls eller inte. Då är det effektivare och tydligare att köra raderna efter (utanför) villkorssatsen:

 

if (empty($rs)) {

echo "There are no present records.";

mysql_free_result($rs);

mysql_close($open);

} else {

while ($rs = mysql_fetch_array ($query)) {

print $rs["usr_fullName"] . " ";

print $rs["log_date"];

print ("<br>");

}

mysql_free_result($rs);

mysql_close($open);

}

Länk till kommentar
Dela på andra webbplatser

En annan synpunkt, som förvisso inte har med problemet att göra, är att i villkorssatsen skriver du två rader som ska köras vare sig vilkoret uppfylls eller inte. Då är det effektivare och tydligare att köra raderna efter (utanför) villkorssatsen:

 

if (empty($rs)) {

  echo "There are no present records.";

  mysql_free_result($rs);

  mysql_close($open);    

} else {

  while ($rs = mysql_fetch_array ($query)) {

      print $rs["usr_fullName"] . " ";

      print $rs["log_date"];

      print ("<br>");

  }

mysql_free_result($rs);

mysql_close($open);

}

insåg det med lite hjälp av moderatorn på phpportalen =)

Länk till kommentar
Dela på andra webbplatser

$open = mysql_connect("localhost", " ", " ");

$query = mysql_db_query("cv", "SELECT DISTINCT log_date,usr_fullName FROM wd_usr_user_tb usr,wd_log_log_tb log WHERE usr.usr_level < 2 AND usr.usr_id = log.usr_id ORDER BY log_date DESC");

$rs = mysql_fetch_array ($query);

 

if (empty($rs)) {

   echo "There are no present records.";

   mysql_free_result($rs);

   mysql_close($open);

} else {

   while ($rs = mysql_fetch_array ($query)) {

      print $rs["usr_fullName"] . " ";

      print $rs["log_date"];

      print ("<br>");

   }

mysql_free_result($rs);

mysql_close($open);

}

Du använder mysql_fetch_array två gånger i koden (markerat i rött). Varje gång du använder den funktionen flyttas pekaren i vektorn (array:en) fram ett snäpp. När du startar din while-loop kommer pekaren att peka på rad två, istället för rad ett.

man tackar! =) fick samma proffisga svar från dig som från andra! =) Vad skulle man göra utan alla vänliga själar..?

Länk till kommentar
Dela på andra webbplatser

En annan synpunkt, som förvisso inte har med problemet att göra, är att i villkorssatsen skriver du två rader som ska köras vare sig vilkoret uppfylls eller inte. Då är det effektivare och tydligare att köra raderna efter (utanför) villkorssatsen:

 

if (empty($rs)) {

  echo "There are no present records.";

  mysql_free_result($rs);

  mysql_close($open);    

} else {

  while ($rs = mysql_fetch_array ($query)) {

      print $rs["usr_fullName"] . " ";

      print $rs["log_date"];

      print ("<br>");

  }

mysql_free_result($rs);

mysql_close($open);

}

jag tänkte faktiskt sriva så som du har gjort, men sen kom jag på att det inte skulle funka iom att man tilldelar variabeln $rs ett värde i while-loopen och inte tidigare. Den första if-satsen att alltid att gälla och då kommer man inte att få ut ngt resultat avsett...

Länk till kommentar
Dela på andra webbplatser

Nils Holmlöv
jag tänkte faktiskt sriva så som du har gjort, men sen kom jag på att det inte skulle funka iom att man tilldelar variabeln $rs ett värde i while-loopen och inte tidigare. Den första if-satsen att alltid att gälla och då kommer man inte att få ut ngt resultat avsett...

Jag antar att du vill veta hur många rader det är i ditt record-set, eller i varje fall veta att det inte är tomt. Använd funktionen mysql_num_rows istället.

Länk till kommentar
Dela på andra webbplatser

jag tänkte faktiskt sriva så som du har gjort, men sen kom jag på att det inte skulle funka iom att man tilldelar variabeln $rs ett värde i while-loopen och inte tidigare. Den första if-satsen att alltid att gälla och då kommer man inte att få ut ngt resultat avsett...

Jag antar att du vill veta hur många rader det är i ditt record-set, eller i varje fall veta att det inte är tomt. Använd funktionen mysql_num_rows istället.

Det var EXAKT vad jag var ute efter, tack! :)

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...