Custom sorting σε MySQL πινακα, με Javascript & php

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

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

Απάντηση
Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από korgr » 17 Δεκ 2009 15:23

Για να μπορεσουμε να εχουμε custom ταξινομιση, θα πρεπει οπωσδηποτε να εχουμε ενα βοηθητικο πεδιο στον πινακα (στην περιπτωση μου το ονομαζω sort) ωστε να κραταει τις τιμες τις ταξινομισης.

Η θεωρια ειναι να αλλαζουμε την ταξινομιση με visual τροπο (WYSIWYG ενα πραμα) με την βοηθεια της javascript.
Μετα δημιουργουμε ενα string με ολα τα ids (οπως ταξινομηθηκαν απο την js) χωρισμενα με "|", και απο εκει και περα αναλαμβανει η php η οποια αποκωδικοποιει το string, το μετατρεπει σε array και αναλαμβανει το update του πινακα στην mysql με τη νεα ταξινομιση.

Εχω αναλυτικα comments στον κωδικα (και της javascript και της php) οποτε λογικα δεν θα υπαρχει προβλημα να το κατανοησει οποιος ασχοληθει μαζι του.

Live Demo


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

<?
require&#40;"db.php"&#41;; // σύνδεση στη βάση
if&#40;$_POST&#91;'data'&#93;&#41;&#123; // αν ερχονται δεδομενα προς ταξινομηση
$ids=explode&#40;"|", $_POST&#91;'data'&#93;&#41;; // Τα αποθηκευουμε στον πίνακα $ids
$allrecords=sizeof&#40;$ids&#41;; // ποσες εγγραφες συνολικα;
for&#40;$n=0;$n<$allrecords-1;$n++&#41;&#123; // παμε μια βολτα να τις δουμε ολες &#58;&#41;
$sort=$n+1; // για καθε μια εγγραφη δημιουργειται αυτοματα μια τιμη για το πεδιο sort &#40;to +1 ειναι για να μην αρχιζουμε με μηδεν
$id=$ids&#91;$n&#93;; // διαβαζουμε το id που ειναι αποθηκευμενο στον php πινακα $ids και ακολουθως ενημερωνουμε τον Mysql πινακα με την νεα τιμη sort
mysql_query&#40;"UPDATE records SET sort='$sort' WHERE id='$id'"&#41; or die&#40;"MYSQL ERROR&#58; ".mysql_error&#40;&#41;&#41;;
&#125;
?>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert&#40;"Sorting completed!"&#41;; // ετσι για να το εμπεδωσουμε
//-->
</SCRIPT>
<?
&#125;
?>
<html>
<head>
<title>Sort Records</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="styles.css">
<script type="text/javascript">

function setdata&#40;&#41;&#123;
obj = document.getElementById&#40;'thelist'&#41;; // η λιστα μας
allrecords = obj.length; // ποσα στοιχεια εχει...
var record = ""; // στην μεταβλητη αυτη θα αποθηκευσουμε ολα τα id...
var seperator = "|"; // ...χωρισμενα με |
 for&#40;n = 0; n < allrecords; n++&#41;&#123;
record += obj.options&#91;n&#93;.value + seperator; // κτιζουμε την μεταβλητη record...
&#125;
document.getElementById&#40;'data'&#41;.value = record; // ...και αναθετουμε την τιμη της στο data που ειναι hidden form field
&#125;

function initlist&#40;&#41;&#123; // την τρεχουμε onload για να επιλεχθει η τελευταια εγγραφη του πινακα
obj = document.getElementById&#40;'thelist'&#41;;
allrecords = obj.length;
obj.selectedIndex = allrecords-1;
&#125;

function sortlist&#40;action&#41;&#123; // Μας τοπθετει στη σωστη θεση καθε εγγραφη οταν παταμε τα βελακια up, down
obj = document.getElementById&#40;'thelist'&#41;;
allrecords = obj.length;
if&#40;action == "up"&#41;&#123; // αν πατηθηκε το up
if&#40;!obj.selectedIndex&#41;&#123;
return false; // δικλειδα ασφαλειας
&#125;else&#123;
idx = obj.selectedIndex; // το τρεχων επιλεγμενο
text_currentoption = obj.options&#91;idx&#93;.text; // το κειμενο της τρεχουσας επιλογης στη λιστα
text_previousoption = obj.options&#91;idx-1&#93;.text;  // το κειμενο της απο πανω της εγγραφης στη λιστα
value_currentoption = obj.options&#91;idx&#93;.value; // η τιμη της τρεχουσας επιλογης στη λιστα
value_previousoption = obj.options&#91;idx-1&#93;.value; // η τιμη της απο πανω της εγγραφης στη λιστα
obj.options&#91;idx&#93;.text = text_previousoption; // εναλλασουμε τα κειμενα και τις τιμες σε αυτες τις δυο επιλογες
obj.options&#91;idx-1&#93;.text = text_currentoption;
obj.options&#91;idx&#93;.value = value_previousoption;
obj.options&#91;idx-1&#93;.value = value_currentoption;
obj.selectedIndex--; // επιλεγμενο πλεον η απο πανω εγγραφη
&#125;
&#125;
if&#40;action=="down"&#41;&#123; // ισχυουν τα ιδια με τις απο πανω ενεργειες απλα εδω πατηθηκε το βελακι down...
if&#40;obj.selectedIndex == allrecords-1&#41;&#123;
return false;
&#125;else&#123;
idx = obj.selectedIndex;
text_currentoption = obj.options&#91;idx&#93;.text;
text_nextoption = obj.options&#91;idx+1&#93;.text;
value_currentoption = obj.options&#91;idx&#93;.value;
value_nextoption = obj.options&#91;idx+1&#93;.value;
obj.options&#91;idx&#93;.text = text_nextoption;
obj.options&#91;idx+1&#93;.text = text_currentoption;
obj.options&#91;idx&#93;.value = value_nextoption;
obj.options&#91;idx+1&#93;.value = value_currentoption;
obj.selectedIndex++;
&#125;
&#125;
&#125;
</script>
</head>

<body bgcolor="#FFFFFF" onLoad="initlist&#40;&#41;;">
<p align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>ΔΙΑΧΕΙΡΙΣΗ 
 ΠΕΡΙΕΧΟΜΕΝΟΥ</b></font></p>
<p align="center"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#990000">Ταξινόμηση 
 εγγραφών</font></b></p>
<hr width="600" align="center">
<form name="theform" id="theform" method="post" action="">
 <div align="center">
  <table width="100%" border="0" cellspacing="0" cellpadding="3" class="normal">
   <tr> 
    <td align="center"> Επιλέξτε μια εγγραφή και μετακινείστε την ανάλογα με τα βελάκια<br>
     Όταν ολοκληρώσετε την αλλαγή όλων των θέσεων, πατήστε &quot;Καταχώρηση&quot; για να αποθηκεύσετε τις αλλαγές <br>
     <br>
     <table border="0" cellspacing="0" cellpadding="3" class="normal" align="center">
      <tr> 
       <td align="center"> 
        <select name="thelist" id="thelist" size="20" class="listbox">
         <?
$result=mysql_query&#40;"select id, name from records order by sort"&#41;;
while &#40;$row = mysql_fetch_array &#40;$result&#41;&#41; &#123;
?> 
         <option value="<?echo&#40;$row&#91;id&#93;&#41;;?>"><?echo&#40;$row&#91;name&#93;&#41;;?></option>
<?
&#125;
?>
        </select>
       </td>
       <td valign="top"><br>
        <br>
        <a href="#" onClick="sortlist&#40;'up'&#41;;return false;"><img src="up.gif" width="23" height="24" border="0"></a><br>
        <a href="#" onClick="sortlist&#40;'down'&#41;;return false;"><img src="down.gif" width="23" height="24" border="0"></a></td>
      </tr>
      <tr> 
       <td align="center" colspan="2">
        <input type="hidden" name="data" id="data">
        <input type="hidden" name="sortdata" value="1">
        <input type="submit" name="submit" value="Sort" onClick="setdata&#40;&#41;" class="normal">
       </td>
      </tr>
     </table>
    </td>
   </tr>
  </table>
 </div>
</form>
 </body>
</html>

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από mgiota » 17 Δεκ 2009 16:45

ενδιαφέρον φαίνεται, θα το κοιτάξω.

Απλά στην περίπτωση που έχω πολλές εγγραφές (τώρα το πολλές είναι σχετικό) κατά πόσο είναι εύχρηστο για το χρήστη;

Σ'αυτήν την περίπτωση δεν είναι πιο εύχρηστο να υπάρχει ένα textfield δίπλα σε κάθε εγγραφή, να γράφει ο χρήστης τη σειρά ταξινόμησης και αυτόματα να γίνονται οι υπόλοιπες προσαρμογές;

Με λίγη βοήθεια το κατάφερα αυτό που ζητούσα αλλά νομίζω είναι μπακάλικο γιατί κάνω αρκετούς ελέγχους και δεν ξέρω κατά πόσο είναι σωστό να χρησιμοποιώ πολλές δομές ελέγχου.


Παρακάτω παραθέτω τον κώδικα που έγραψα για τη σελίδα sort_results.php

$result = $mysqli->query("SELECT * FROM articles WHERE category_id='$id' ORDER BY position");
$num=0;

//to while to xrisimopoiw gia na dw an oi times pou eginan post einai 1 h perissoteres

while($myrow = $result->fetch_object()){

$idp=$myrow->id;
$old_position=$myrow->position;
$state="position$idp";
$position=$_GET["$state"];
if($old_position!=$position){
$num++;
}
}


if($num>1){

$result = $mysqli->query("SELECT * FROM articles WHERE category_id='$id' ORDER BY position");

while($myrow = $result->fetch_object()){
$idp=$myrow->id;
$state="position$idp";
$position=$_GET["$state"];
$sqlr = "UPDATE articles SET position='$position' WHERE id='$idp'";
$resultr = $mysqli->query($sqlr);
}


} else {

$result = $mysqli->query("SELECT * FROM articles WHERE category_id='$id' ORDER BY position");

while($myrow = $result->fetch_object()){
$idp=$myrow->id;
$old_position=$myrow->position;
$state="position$idp";
$position=$_GET["$state"];
if($old_position!=$position){
$theidp=$myrow->id;
$theold_position=$myrow->position;
$state="position$theidp";
$theposition=$_GET["$state"];
if($old_position<$position){
$act="down";
} else {
$act="up";
}
}

}

$sqlr = "UPDATE articles SET position='$theposition' WHERE id='$theidp'";
$resultr = $mysqli->query($sqlr);
if($act=="up"){
$sql2="UPDATE articles SET position=position+1 WHERE position>=$theposition && position<$theold_position && id!='$theidp'";
$result2=$mysqli->query($sql2);
} else {
$sql2="UPDATE articles SET position=position-1 WHERE position<=$theposition && position>$theold_position && id!='$theidp'";
$result2=$mysqli->query($sql2);
}
}


Αν διαβάσει κανείς τον κώδικα, εγώ αρχικά είχα μόνο το κομμάτι του κώδικα όπου γίνονταν Post πολλές τιμές. (if($num>1)) Ο χρήστης δηλαδή άλλαζε όλες τις τιμές και δεν περιελάμβανα την περίπτωση όπου άλλαζε μόνο μία τιμή και ανάλογα προσαρμόζονταν και οι υπόλοιπες.

Ύστερα από υπόδειξη ενός παιδιού χρησιμοποίησα τον κώδικά του και έκανα μια σύνθεση.

Λειτουργεί μια χαρά αλλά δεν ξέρω κατά πόσο επιβαρύνουν το σύστημα οι έλεγχοι που έχω.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από korgr » 17 Δεκ 2009 17:15

Πολυ μπερδεμα ετσι γιατι αν θες να αλλαξεις ταυτοχρονα σε αρκετες εγγραφες θεσεις, αντε να θυμασαι τι αριθμους πρεπει να βαζεις στα sort textfields...

Αυτο θα ειχε εφαρμογη αν ηθελες να αλλαξεις θεση μονο σε μια εγγραφη και να εδινες την τιμη της θεσης καταταξης. Ετσι ομως για καθε μια εγγραφη που θες να αλλαξει θεση θα πρεπει να γινεται εκ νεου κληση στον server...

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από mgiota » 17 Δεκ 2009 17:38

Ενώ με τον τρόπο που λες εσύ, όπως βλέπω και στο demo, με τα βελάκια αλλάζω ταυτόχρονα τη θέση πολλών εγγραφών και πατώντας το κουμπί γίνεται μία μόνο φορά κλήση στον server;

Κατά τη γνώμη σου ο τρόπος αυτός είναι εύχρηστος μέχρι ποιον αριθμό εγγραφών;


Αυτό είναι αντίστοιχο με κάτι plugins που υπάρχουν και κάνεις drag and drop τις εγγραφές; Σαν λογική εννοώ όχι σαν υλοποίηση.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από korgr » 17 Δεκ 2009 18:07

Ακριβως!
Οταν πατας τα βελακια το sortαρισμα γινεται τοπικα στο μηχανημα του χρηστη μεσω Javascript. Μονο οταν εχεις ορισει ολες τις θεσεις εκει που θες, πατας sort και καλειται το php script που θα αποθηκευσει το αποτελεσμα στην mysql.

Φυσικα κατανοω πως για πολλες εγγραφες ουτε αυτο ειναι χρηστικο.
Γενικα ειναι μια καλη μεθοδος για ταξινομησεις κατηγοριων ή καποιων tables που δεν περιεχουν πανω απο 100-200 εγγραφες.

Βεβαια θα χρειαστει και μια τροποιηση το script ωστε εκτος απο το βελακια για κινηση +- 1 θεση, να μπουν και διπλα βελακια για κινηση ανα 10, 20 , 30, ν θεσεις (φαντασου ενα textfield που θα οριζει ο χρηστης το step μετακινησης).

Για πολυ περισσοτερες εγγραφες, νομιζω μια λυση σαν τη δικη σου (μια μια εγγραφες να ταξινομουνται σε νεα θεση) ειναι η ενδεδειγμενη...

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από mgiota » 17 Δεκ 2009 18:09

Ωραία αφού κατάλαβα τη λογική και τα ξεκαθάρισα μένει απλά η υλοποίηση. Θα το δοκιμάσω το παράδειγμά σου.


Σ'ευχαριστώ πολύ.

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από dimsis » 17 Δεκ 2009 19:59

Ωραίος ο Νότης. Άντε και η επόμενη version με drag & drop sort http://tool-man.org/examples/sorting.html :)

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από korgr » 17 Δεκ 2009 20:39

Χαχα, αν υπηρχε χρονος Δημητρη μου θα ηταν ενα καλο case study (με jquery πχ) :)

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από mgiota » 17 Δεκ 2009 22:04

Korgr πολύ καλό το παράδειγμα, μόλις το διάβασα αναλυτικά, πολύ κατανοητός ο κώδικάς σου και πολύ κατατοπιστικά τα σχόλια που έχεις.

Thanks.

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από mgiota » 18 Δεκ 2009 11:47

Μία ερώτηση ρε παιδιά γιατί όσο πιο πολύ το ψάχνω τόσο περισσότερες απορίες μου δημιουργούνται.

Έστω ότι έχω 5 εγγραφές και ταξινομούνται ως προς τη θέση, όπου τα positions στη βάση είναι 1,2,3,4,5.

Στο επίπεδο διαχείρισης βλέπεις το όνομα της κάθε εγγραφής και το αντίστοιχο νούμερο που τραβάει από τη βάση. Έστω ότι διαγράφω την εγγραφή που έχει position 2, τότε οι εγγραφές που θα μείνουν θα έχουν νούμερα 1,3,4,5.

Το ερώτημά μου είναι το εξής αν θέλω να υπάρχει ακεραιότητα στη βάση μου κάθε φορά που διαγράφω μια εγγραφή, θα πρέπει να κάνω και αντίστοιχες κινήσεις ώστε να αλλάξουν και τα positions; Δεν νομίζω να είναι αυτή η λύση.

Ή μήπως εκεί που δείχνω τις εγγραφές με τα αντίστοιχα νουμεράκια της θέσης να μη δείχνει την τιμή που τραβάει από τη βάση, αλλά μια και του λέω να τα ταξινομήσει κατά το πεδίο Position αύξουσα, να τα δείχνει με αρίθμηση από 1 έως τον αριθμό των εγγραφών;

Επομένως korgr (Νότη?) για το demo σου θέλω να ρωτήσω, εσύ έτσι πως τα εμφανίζεις στη λίστα σου το πεδίο position που έχεις στη βάση σου με την αρίθμηση που έχεις στη λίστα είναι τα ίδια; Θα κοιτάξω βέβαια τον κώδικά σου για να βρω άκρη απλά το θέτω σαν ερώτημα για να καταλάβω πως λειτουργεί μια σωστή ταξινόμηση λαμβάνοντας υπόψη και την ακεραιότητα της βάσης σε περίπτωση διαγραφής και όχι μόνο ανανέωσης.

Ελπίζω να μην πρόκύψουν άλλες απορίες. Λογικό βέβαια, μια και υπάρχει ολόκληρη Θεωρία Αλγορίθμων ταξινόμησης. Και τώρα τα βλέπω στην πράξη..

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από korgr » 18 Δεκ 2009 14:52

mgiota (Γιωτα?), νομιζω πως δεν θα πρεπει να σε απασχολει το θεμα των κενων αριθμων σε μια ταξινομηση μετα απο διαγραφη.
Πρωτον διοτι δεν επηρεαζει την ταξινομηση και δευτερον γιατι θα ξαναγινει κανονικη αριθμηση (τουλαχιστον στο δικο μου script), οταν θα αποθηκευσεις μια νεα ταξινομηση (ακομα και αν δεν κανεις καποια αλλαγη στις θεσεις).

Εγω χρησιμοποιω το sort (το δικο σου position) απλα στο query για να ταξινομησω τα αποτελεσματα που μπαινουν στο select list. Εκει αυτοματα παιρνουν αυτοματα ενα index της λιστας (που αρχιζει απο μηδεν).
Μετα στην php δημιουργουνται απο την αρχη ολες οι τιμες ταξινομησης και καλυπτονται τυχον κενα (ελειπη νουμερα απο διαγραφες)

Ελπιζω να καταλαβα τι εννοεις και να ημουν κατανοητος!
Νοτης

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από mgiota » 18 Δεκ 2009 15:24

Καταρχήν καλά μάντεψες είμαι η Γιώτα. Μια χαρά κατάλαβες αυτό που εννοούσα και μια χαρά κατανοητός έγινες. Απλά απ'οτι βλέπω το scriptaki αυτό κάνει τόσα query στον server όσες είναι και οι εγγραφές. Εμένα πάντως μου κάνει για τον αριθμό των εγγραφών που θα χω μια και θα βάλω Limit.

Τώρα μου δημιουργείται ένα άλλο ερώτημα που το βασάνιζα τόση ώρα με μια άλλη κοπελιά οπότε το κεφάλι μου έχει γίνει λίγο καζάνι, αλλά θα προσπαθήσω να το εξηγήσω και όποτε μπορέσεις μου απαντάς.

Όταν κάνουμε ταξινόμηση χρονολογικά συνήθως εμφανίζουμε από το πιο πρόσφατο στο πιο παλιό. Κάνουμε δηλαδή ένα ORDER BY date DESC. Σωστά; μια χαρά μέχρι εδώ. Όταν κάνουμε ταξινόμηση κατά θέση να πούμε αρχικά (όπως έχουμε πει) ότι έχουμε ένα πεδίο position όπου κατά την εισαγωγή μιας εγγραφής αυτό αυξάνει κατά 1. Επομένως αν πω ORDER BY position ASC αυτό με position 1 θα εμφανιστεί πρώτο και τα υπόλοιπα ακολουθούν.

Αν όμως ο πελάτης θέλει να εμφανίζονται από το πιο πρόσφατο στο πιο παλιό και να έχει τη δυνατότητα να αλλάζει το position και πω ORDER BY position DESC στην ιστοσελίδα μου θα εμφανιστούν μια χαρά στην εφαρμογή διαχειριστή όμως τα πράματα είναι ανάποδα. Αν έχω δηλαδή στο διαχειριστή ORDER BY position ASC αυτό που θα φαίνεται πρώτο στο site θα εμφανίζεται τελευταίο.

Η κοπελιά μου πρότεινε να κάνω πρώτα ORDER BY date desc και μετά position asc αν θέλω να αλλάζουν θέση αυτά της ίδιας ημερομηνίας.

Όμως ο πελάτης δε θέλε κάτι τέτοιο. Το πρόβλημα είναι ότι όταν κάνω insert μια εγγραφή το position αυτόματα αυξάνει κατά 1. Μήπως αυτό που θα έπρεπε να γίνει, είναι στο insert μιας εγγραφής το τελευταίο position να γίνεται 1 και τα υπόλοιπα να αλλάζουν αντίστοιχα; Δεν ξέρω όμως και δεν έχω αυτή τη στιγμή το μυαλό να σκεφτώ πόσο περίπλοκο θα ήταν ένα τέτοιο update.

Δεν ξέρω αν έγινα αντιληπτή και αν κατάλαβες που είναι ο προβληματισμός μου γιατί και γω έχω μπερδευτεί.

Εσύ πες μου όταν κάνεις ταξινόμηση κατά position κάνεις αύξουσα ταξινόμηση, γιατί εκεί δεν υπάρχει πρόβλημα. Στη φθίνουσα με μπερδεύει το πράμα.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από korgr » 18 Δεκ 2009 16:02

Ομολογω πως μαλλον δεν εχω καταλαβει καλα :)
Οταν ταξινομουμε αποτελεσματα, τα ταξινομουμε βασει ενος συγκεκριμενου κριτηριου, και αν θελουμε προσθετουμε και δευτερο για να ταξινομησουμε και καποιες εγγραφες που δεν ικανοποιουνται μονο με το πρωτο κριτηριο, οπως σου ειπε και η φιλη σου σε αυτο που ανεφερες.

Διαφορετικα υπαρχει εκ φυσεως conflight!
Ή ταξινομεις βασει ημερομηνιας ή βασει αλλου κριτηριου (custom sort field)
Αν ο πελατης θελει «order by date desc», η ταξινομηση «order by position» που κολλαει? Δεν θα ερθει σε αντιθεση με την πρωτη λογικη ταξινομησης? :roll:

Στο insert εχεις δυο επιλογες:
Να δωσεις στο custom sort field τιμη μεγαλυτερη απο την υπαρχουσα max (το αντικειμενο προστιθεται τελευταιο)
Να δωσεις ως τιμη 0 ή -1 (αν υποστηριζει unsign value το πεδιο σου) και η εγγραφη σου θα τοποθετηθει στην κορυφη του order.

Εκτος αν δεν καταλαβα Χριστό και λεω μαμακιες τοση ωρα :lol:

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από fafos » 18 Δεκ 2009 16:05

To position DEN prepei na einai auto_increment kai na einai typou INT...

me kathe nea eggrafh tou dineis to position=0 kai me ena for -meta to insert- prostheteis 1 gia OLES tis eggrafes (kai gia thn nea) kanontas update... etsi to 0 menei kai pali keno kai perimenei thn nea eggrafh h opoia tha parei pali thn timh 0 klp klp..

EDIT.. peripou me auto pou anaferei o kontopatrioths.. :lol:
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Custom sorting σε MySQL πινακα, με Javascript & php

Δημοσίευση από mgiota » 18 Δεκ 2009 16:09

ευχαριστώ πολύ παιδιά, μάλλον αυτή είναι η λύση που έψαχνα με το 0. Πολύ λογικό ακούγεται.

Αχ ας τελειώσει επιτέλους αυτή η ταξινόμηση!

Απάντηση

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

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

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