Σύνολο αποτελεσμάτων και limt

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
nknet
Δημοσιεύσεις: 97
Εγγραφή: 23 Οκτ 2003 07:54

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από nknet » 10 Ιαν 2007 13:25

Για χαρά θέλω να φτιάξω μια σελίδα που να δείχνει τις έγραφες ανά 50 σε κάθε σελίδα.
Και στο τέλος του query γράφω

Κώδικας: Επιλογή όλων

LIMIT 0 , 50 ;
Για να ξέρω πόσα θα είναι τα αποτελέσματα για να βγάλω το λινκ για επόμενή σελίδα χρησιμοποιώ το εξής query

Κώδικας: Επιλογή όλων

SELECT COUNT(*) FROM `πίνακας` ;
Αντί να ξανά στέλνω και άλλο query στην βάση υπάρχει άλλος τρόπος να μάθω το σύνολο των αποτελεσμάτων?
Ευχαριστώ εκ τον προτέρων

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από papatzas » 10 Ιαν 2007 17:39

Κώδικας: Επιλογή όλων

$result = mysql_query("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows($result);

echo "$num_rows Rows\n";

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Rapid-eraser » 10 Ιαν 2007 17:48

kalitera va kavei count apo afto :P

Dev vomizo oti iparxei lisi sto problima sou.

2 queries eivai aparetita stnv periptosi afti.

Afto pou 8a mporouses va kaveis eivai va katagrafeis se eva pedio
to count kai opote iparxei kapoia allagi va tnv pervas mesa gia va miv xriazete
va scanareis oli tnv basi se ka8e query.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Khronos » 06 Μαρ 2007 19:06

Egw ithela na kanw kati paromoio. Thelw na emfanizetai kapoios arithmos eggrafon kai apo kato na iparxei to gnosto previous - next page. Pos ginetai auto? Euxaristo ek ton proteron :P

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Banavas » 07 Μαρ 2007 08:21

Khronos έγραψε:Egw ithela na kanw kati paromoio. Thelw na emfanizetai kapoios arithmos eggrafon kai apo kato na iparxei to gnosto previous - next page. Pos ginetai auto? Euxaristo ek ton proteron :P
http://codewalkers.com/tutorials/4/1.html
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από skeftomilos » 07 Μαρ 2007 10:17

Rapid-eraser έγραψε:Afto pou 8a mporouses va kaveis eivai va katagrafeis se eva pedio
to count kai opote iparxei kapoia allagi va tnv pervas mesa gia va miv xriazete
va scanareis oli tnv basi se ka8e query.
Αυτού του είδους το optimization μπορεί και πρέπει να γίνεται μέσα στην ίδια τη database engine, δε μπορεί να είναι ευθύνη του developer.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Rapid-eraser » 07 Μαρ 2007 10:26

ME eva SP 8a mporouse va givei poli efkola kati tetoio.
Alla eimai periergos gia to pos 8a mporouse va givei pio aftomata
se database engine epipedo.

Exeis proxiro kaveva tetoio paradigma ?
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από skeftomilos » 07 Μαρ 2007 12:36

Εννοώ ότι μια καλή database engine θα πρέπει να έχει build-in αυτά τα optimizations. Κατά τον ίδιο τρόπο που μια καλή HTML rendering engine πρέπει να κασάρει το πλήθος των διάφορων DOM collections, και να μην ξαναμετράει τα elements κάθε φορά που καλούμε π.χ. την document.images.length.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Rapid-eraser » 07 Μαρ 2007 12:53

mia kali :P
Edw milame gia mysql omos :)
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Khronos » 07 Μαρ 2007 13:59

Thanks Banavas! Θα το ελέγξω!

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από cpulse » 07 Μαρ 2007 14:21

Σκέφτηκα να απαντήσω κατευθείαν οτι έτσι κι αλλιώς αυτή τη δουλειά κάνουν τα indexes. Κρατάνε τις σειρές και τα σύνολα. Αλλά επειδή δεν έχω ούτε τον χρόνο ούτε την όρεξη να ανοίξω τον κώδικα της MySQL, και επειδή με ενδιαφέρει το θέμα πολύ είπα να κάνω ένα μικρό benchmark.

Για να μη σας κουράζω δεν δίνω τον κώδικα.. αν τον θέλει κανείς όμως ας μου το πεί να τον γράψω.

Τα test έγιναν σε Win XP SP2, Apache 2.0, PHP 5.0.4, MySQL 3.23 ... αν δουλεύει σε MySQL 3 θα δουλεύει καλύτερα σε νεότερες εκδόσεις :wink:

Το 1ο test ήταν SELECT COUNT(*) FROM table .. δηλαδή βασιζόμενο στο primary index.
13 seconds for 10,000 iterations = 769 Hz σε πίνακα με 1,805,432 εγγραφές.

Το 2ο test ήταν SELECT COUNT(*) FROM table .. δηλαδή βασιζόμενο στο primary index.
14 seconds for 10,000 iterations = 714 Hz σε πίνακα με 8 εγγραφές.

Το 3ο test ήταν SELECT COUNT(*) FROM table WHERE field=NUMBER .. δηλαδή βασιζόμενο σε απλό index και σε κάθε iteration το NUMBER είναι τυχαίο!
48 seconds for 10,000 iterations = 208 Hz σε πίνακα με 1,805,432 εγγραφές.

Αρα λοιπόν MySQL still rulez :) ακόμα και η αρχαία της έκδοση.

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Khronos » 07 Μαρ 2007 15:54

Θα σας ζαλίσω πάλι! Εκανα τα εξής:

Κώδικας: Επιλογή όλων

<?php

if&#40;!isset&#40;$start&#41;&#41; $start = 0;

// db.php

mysql_connect&#40;"localhost", "root", "******"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;"test2"&#41; or die&#40;mysql_error&#40;&#41;&#41;;

$query = "SELECT * FROM mail LIMIT " . $start . ", 5";
//do database connection
$result = mysql_query&#40;$query&#41;; //you should do error checking
//display data

echo "<table>
<tr bgcolor='#ece3d2'>
<th>&nbsp;</th>
<th>&#208;&#241;&#239;&#242;</th>
<th>&#200;&#221;&#236;&#225;</th>
<th>&#199;&#236;&#229;&#241;&#239;&#236;&#231;&#237;&#223;&#225;</th>
<th>&#191;&#241;&#225;</th>
</tr>";
 

while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41;
  &#123;
  echo "<tr bgcolor='#ece3d2'>";
  echo "<td align='center'><input type='checkbox' /></td>";
  echo "<td align='center' class='mailmessages'>" . $row&#91;'receiver'&#93; . "</td>";
  echo "<td align='center' class='mailmessages'>" . $row&#91;'subject'&#93; . "</td>";
  echo "<td align='center' class='mailmessages'>" . $row&#91;'datesent'&#93; . "</td>";
  echo "<td align='center' class='mailmessages'>" . $row&#91;'timesent'&#93; . "</td>";
  echo "</tr>";
  &#125;
echo "</table>";

$query = "SELECT count&#40;*&#41; as count FROM mail"; 
$result = mysql_query&#40;$query&#41;;
$row = mysql_fetch_array&#40;$result&#41;;
$numrows = $row&#91;'count'&#93;;
if&#40;$start > 0&#41; 
   echo "<a href=\"" . $PHP_SELF . "?start=" . &#40;$start - 10&#41; . 
        "\">Previous</a><BR>\n";
if&#40;$numrows > &#40;$start + 10&#41;&#41; 
   echo "<a href=\"" . $PHP_SELF . "?start=" . &#40;$start + 10&#41; . 
        "\">Next</a><BR>\n";
?> 


Εμφανίζονται τα δεδομένα κανονικά με το limit που έχω ορίσει αλλα δν εμφανίζονται τα previous-next. Τι λάθος εχω κάνει?

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από cpulse » 07 Μαρ 2007 16:04

Πολλά μπορεί να συμβαίνουν..

Για καλό και για κακό ακολούθησε και τη σύσταση του ίδιου του κώδικα που έχεις
$result = mysql_query($query); //you should do error checking

Κάνε το συνήθειο να γράφεις τα queries έτσι:

Κώδικας: Επιλογή όλων

$result = mysql_query&#40;$query&#41; or die&#40;mysql_error&#40;&#41;&#41;;
Τώρα μπορεί να σου βγάλει κάποιο error να σε διαφωτίσει τι πήγε στραβά.

Άλλο που μπορεί να φταίει.. $PHP_SELF να το γράφεις $_SERVER['PHP_SELF']

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Banavas » 07 Μαρ 2007 17:13

Δοκίμασε αυτό

Κώδικας: Επιλογή όλων

<?php 

$lpp=5 ; // lines pep page

if&#40;!isset&#40;$start&#41;&#41; $start = 0; 

// db.php 

mysql_connect&#40;"localhost", "root", "******"&#41; or die&#40;mysql_error&#40;&#41;&#41;; 
mysql_select_db&#40;"test2"&#41; or die&#40;mysql_error&#40;&#41;&#41;; 

$query = "SELECT * FROM mail LIMIT " . $start . ", $lpp"; 
//do database connection 
$result = mysql_query&#40;$query&#41;; //you should do error checking 
//display data 

$rows= mysql_query&#40;"SELECT count&#40;*&#41; as count FROM mail"&#41;; 
$row = mysql_fetch_array&#40;$rows&#41;; 
$numrows = $row&#91;'count'&#93;; 
if&#40;$start > 0&#41; 

echo "<table> 
<tr bgcolor='#ece3d2'> 
<th>&nbsp;</th> 
<th>&ETH;&ntilde;&iuml;&ograve;</th> 
<th>&Egrave;&Yacute;&igrave;&aacute;</th> 
<th>&Ccedil;&igrave;&aring;&ntilde;&iuml;&igrave;&ccedil;&iacute;&szlig;&aacute;</th> 
<th>&iquest;&ntilde;&aacute;</th> 
</tr>"; 
  

while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41; 
  &#123; 
  echo "<tr bgcolor='#ece3d2'>"; 
  echo "<td align='center'><input type='checkbox' /></td>"; 
  echo "<td align='center' class='mailmessages'>" . $row&#91;'receiver'&#93; . "</td>"; 
  echo "<td align='center' class='mailmessages'>" . $row&#91;'subject'&#93; . "</td>"; 
  echo "<td align='center' class='mailmessages'>" . $row&#91;'datesent'&#93; . "</td>"; 
  echo "<td align='center' class='mailmessages'>" . $row&#91;'timesent'&#93; . "</td>"; 
  echo "</tr>"; 
  &#125; 
echo "</table>"; 

if&#40;$start > 0&#41; 
   echo "<a href=\"" . $PHP_SELF . "?start=" . &#40;$start - $lpp&#41; . 
        "\">Previous</a><BR>\n"; 
if&#40;$numrows > &#40;$start + $lpp&#41;&#41; 
   echo "<a href=\"" . $PHP_SELF . "?start=" . &#40;$start + $lpp&#41; . 
        "\">Next</a><BR>\n"; 
?> 
Μπορείς να μεταφέρεις την μεταβλητή $lpp στο config αρχείο σου για να έχεις όλες τις ρυθμίσεις μαζί.

Για να εμφανίζονται τα prev - next πρέπει οι εγγραφλες σου να είναι περισσότερες από το νούμερο $lpp

Y.Γ.

Το πρόβλημα ήταν στο ότι άλλαξες το limit για να εμφανίσεις λιγότερες σειρές χωρίς να πειράξεις τον κώδικα παρακάτω που κάνει τις πράξεις για την εμφάνιση. Τώρα μπορείς να πειράζεις το $ipp για να αλλάζεις τον αριθμό των σειρών
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Σύνολο αποτελεσμάτων και limt

Δημοσίευση από Khronos » 07 Μαρ 2007 18:04

Τωρα εντάξει εμφανίζονται τα links αλλα δεν δουλευουν. Προσπάθησα να βάλω το $start==5 και μου εμφανίζει τα δεδομένα που πρέπει να εμφανίσει. Αλλα με τα λινκς δεν γίνεται αν και στη μπάρα οταν κανω hover στο λινκ φαίνεται το ?start=10 ktl.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες