ταξινόμηση εγγραφών (move up / down records)

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

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

Απάντηση
alohagr
Δημοσιεύσεις: 25
Εγγραφή: 16 Ιουν 2007 10:41

ταξινόμηση εγγραφών (move up / down records)

Δημοσίευση από alohagr » 30 Δεκ 2008 13:19

Καλημέρα σας και χρόνια πολλά θα ήθελα να με κετευθύνετε σχετικά το πως μπορώ να ταξινομήσω τις ήδη υπάρχουσες εγγραφές μου στη βάση δεδομένων. Ας υποθέσουμε ότι με κουμπια up & down θα μπορούμε να αλλάζουμε τη σειρά των εγγραφών μας. Νομίζω ότι κάπου είχε ξανασυζητηθεί το θέμα εδώ μέσα αλλά δεν μπορώ να το βρώ. Αν κάποιος έχει δει κάπου κάποιο tutorial ή μπορεί να βοηθήσει θα το εκτιμούσα ιδιαίτερα. Ευχαριστώ πολύ και καλή χρονιά εύχομαι σε όλους[/u]

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

ταξινόμηση εγγραφών (move up / down records)

Δημοσίευση από fafos » 30 Δεκ 2008 15:44

Gine poio sygkekrimenos.. pou thes na taksinomeis tis eggrafes? sthn diaxeirish otan tis epexergazese h otan tis emfanizeis ston xrhtsh na exei thn dynatothta na tis taksinomei me auta ta koumpakia?

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

ταξινόμηση εγγραφών (move up / down records)

Δημοσίευση από papatzas » 30 Δεκ 2008 15:53

Χρησιμοποίησε ένα field : order_num και παίζε με αυτό... σύμφωνα με το παρακάτω

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


	function downNew()
	{
		
		$query="SELECT count(*) as number, max(order_num) AS up 
				FROM $this->table
				WHERE order_num<&#123;$this->Order_num&#125; 
				AND category_id=&#123;$this->Category_id&#125;";
		$result= $this->query&#40;$query&#41;;
		$row=mysql_fetch_array&#40;$result&#41;;
		
		if &#40;&#40;$row&#91;'number'&#93;&#41;>0&#41;
		&#123;
			$query="UPDATE $this->table SET order_num= &#123;$this->Order_num&#125; WHERE order_num= &#123;$row&#91;'up'&#93;&#125;";
			$result= $this->query&#40;$query&#41;;
			$query="UPDATE $this->table SET order_num= &#123;$row&#91;'up'&#93;&#125; WHERE id= &#123;$this->Id&#125;";
			$result= $this->query&#40;$query&#41;;
		&#125;
		
	&#125;
	
	
	
	// Push article in order
	function upNew&#40;&#41;
	&#123;
		$query="SELECT count&#40;*&#41; as number, min&#40;order_num&#41; as down 
			    FROM $this->table
				WHERE order_num>&#123;$this->Order_num&#125; 
				AND category_id=&#123;$this->Category_id&#125;";
		$result= $this->query&#40;$query&#41;;
		$row=mysql_fetch_array&#40;$result&#41;;

		if &#40;&#40;$row&#91;'number'&#93;&#41;>0&#41;
		&#123;
			$query="UPDATE $this->table SET order_num=&#123;$this->Order_num&#125; WHERE order_num=&#123;$row&#91;'down'&#93;&#125;";
			$result= $this->query&#40;$query&#41;;
			$query="UPDATE $this->table SET order_num=&#123;$row&#91;'down'&#93;&#125; WHERE id=&#123;$this->Id&#125;";
			$result= $this->query&#40;$query&#41;;
		&#125;
	&#125;
	

:-)

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

ταξινόμηση εγγραφών (move up / down records)

Δημοσίευση από korgr » 30 Δεκ 2008 15:59

Αν σε ενδιαφέρει σε επίπεδο διαχείρισης και θες η νέα ταξινόμηση να αποθηκεύεται στην βάση, θα χρειαστείς και ένα πεδίο με όνομα πχ 'sort'

Παράδειγμα: Custom sorting in mysql

Κώδικας:

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

<?
require&#40;"db.php"&#41;;
if&#40;$writedata&#41;&#123;
$ids=explode&#40;"|", $data&#41;;
$allrecords=sizeof&#40;$ids&#41;;
for&#40;$n=0;$n<$allrecords-1;$n++&#41;&#123;
$sort=$n+1; // generate sort number
$id=$ids&#91;$n&#93;;
mysql_query&#40;"UPDATE categories SET sort='$sort' WHERE catid='$id'"&#41; or die&#40;"MYSQL ERROR&#58; ".mysql_error&#40;&#41;&#41;;
&#125;
?>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert&#40;"Η νέα ταξινόμηση αποθηκεύθηκε με επιτυχία!"&#41;;
document.location.href="sort_categories.php";
//-->
</SCRIPT>
<?
exit;
&#125;
?>
<html>
<head>
<title>Admin Panel</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1253">
<link rel="stylesheet" href="styles.css">
<script type="text/javascript">

function setdata&#40;&#41;&#123;
obj = eval&#40;"document.theform.thelist"&#41;;
allrecords = obj.length;
var record = "";
var seperator = "|";
 for&#40;n = 0; n < allrecords; n++&#41;&#123;
record += obj.options&#91;n&#93;.value + seperator;
&#125;
document.theform.data.value = record;
&#125;

function initlist&#40;&#41;&#123;
obj = eval&#40;"document.theform.thelist"&#41;;
allrecords = obj.length;
obj.selectedIndex = allrecords-1;
&#125;

function sortlist&#40;action&#41;&#123;
obj = eval&#40;"document.theform.thelist"&#41;;
allrecords = obj.length;
if&#40;action == "up"&#41;&#123;
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;
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" 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" size="15" class="listbox">
         <?
$result=mysql_query&#40;"select catid, catname from categories where 1 order by sort"&#41;;
while &#40;$row = mysql_fetch_array &#40;$result&#41;&#41; &#123;
?>
         <option value="<?echo&#40;$row&#91;catid&#93;&#41;;?>"><?echo&#40;$row&#91;catname&#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">
        <input type="submit" name="Submit" value="Καταχώρηση" onClick="setdata&#40;&#41;" class="normal">
       </td>
       <td align="center">
        <input type="hidden" name="data">
        <input type="hidden" name="writedata" value="1">
       </td>
      </tr>
     </table>
    </td>
   </tr>
  </table>
 </div>
</form>
 </body>
</html> 
Το db.php περιέχει το connection στη βάση
Ο κώδικας είναι αρκετά παλιός οπότε όπου χρειαστεί κάνεις επεμβάσεις στην html (encodings, doctype κλπ)

alohagr
Δημοσιεύσεις: 25
Εγγραφή: 16 Ιουν 2007 10:41

ταξινόμηση εγγραφών (move up / down records)

Δημοσίευση από alohagr » 30 Δεκ 2008 18:39

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

Άβαταρ μέλους
afroditi590
Δημοσιεύσεις: 123
Εγγραφή: 08 Ιαν 2007 11:52

ταξινόμηση εγγραφών (move up / down records)

Δημοσίευση από afroditi590 » 31 Δεκ 2008 12:11

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

SELECT title, description, id FROM test ORDER BY $x $y;
Όπου $x θα είναι το αντίστεοιχο πεδίο του πίνακα που θέλεις να γίνει η ταξινόμηση και $y η μεταβλητή που θα καθορίζει εάν θα είναι αύξουσα ή φθίνουσα.

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

alohagr
Δημοσιεύσεις: 25
Εγγραφή: 16 Ιουν 2007 10:41

ταξινόμηση εγγραφών (move up / down records)

Δημοσίευση από alohagr » 31 Δεκ 2008 12:50

ok νομίζω κατάλαβα πως πρέπει να το κάνω, ευχαριστώ.

Απάντηση

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

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

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