2010-08-15 9 views
15

Onun o kadar temel bir şey olduğunu biliyorum çağrılan HTML tablosunun satırlarını sıralamak için, ancak bir Google arama nasıl yeniden sıralama için th bağlantıları tıklayarak sonra satırları beni göstermedi.Nasıl MySQL

ben hallederim:

<table border="1"> 
    <tr> 
    <th>Type:</th> 
    <th>Description:</th> 
    <th>Recorded Date:</th> 
    <th>Added Date:</th> 
    </tr> 

<?php 
while($row = mysql_fetch_array($result)){ 
    ?> 
    <tr> 
     <td><?php echo $row['type'] ?></td> 
     <td><?php echo $row['description'] ?></td> 
     <td><?php echo $row['recorded_date'] ?></td> 
     <td><?php echo $row['added_date'] ?></td> 
    </tr> 
    <br /> 


    <?php 
} 
mysql_close(); 
?> 
</table> 

Ben Recorded Date veya Added Date ve sıralama yoluyla tarihte sıralama alfabetik type ve tıklatın ve tıkla gerekiyor. Ben MySQL sorguları bunu olması gerekir görüyoruz ama a href etiketleriyle Koşullamalar olarak kurarım?

cevap

37

aynı sayfaya işaret, sütun başlıklarını bir link koymak olacaktır Bunu yapmanın en kolay yolu. Sorgu dizesinde, ne tıklandıklarını bildiğiniz bir değişken koyun ve daha sonra siparişi gerçekleştirmek için SQL sorgunuzda ORDER BY kullanın.

HTML şu şekilde görünecektir:

<?php 

$sql = "SELECT * FROM MyTable"; 

if ($_GET['sort'] == 'type') 
{ 
    $sql .= " ORDER BY type"; 
} 
elseif ($_GET['sort'] == 'desc') 
{ 
    $sql .= " ORDER BY Description"; 
} 
elseif ($_GET['sort'] == 'recorded') 
{ 
    $sql .= " ORDER BY DateRecorded"; 
} 
elseif($_GET['sort'] == 'added') 
{ 
    $sql .= " ORDER BY DateAdded"; 
} 

$> 

Bildirim $ _GET değerini doğrudan alıp eklemek gerekir:

<th><a href="mypage.php?sort=type">Type:</a></th> 
<th><a href="mypage.php?sort=desc">Description:</a></th> 
<th><a href="mypage.php?sort=recorded">Recorded Date:</a></th> 
<th><a href="mypage.php?sort=added">Added Date:</a></th> 

Ve php kodunda

, böyle bir şey yapmak Sorgunuza Bazı kullanıcılar MyPage.php'ye sahip olabilir mi? Sort =; MyTable'DAN SİL;

<table> 
    <tr> 
     <th> 
      <a href="?orderBy=type">Type:</a> 
     </th> 
     <th> 
      <a href="?orderBy=description">Description:</a> 
     </th> 
     <th> 
      <a href="?orderBy=recorded_date">Recorded Date:</a> 
     </th> 
     <th> 
      <a href="?orderBy=added_date">Added Date:</a> 
     </th> 
    </tr> 
</table> 
<?php 
$orderBy = array('type', 'description', 'recorded_date', 'added_date'); 

$order = 'type'; 
if (isset($_GET['orderBy']) && in_array($_GET['orderBy'], $orderBy)) { 
    $order = $_GET['orderBy']; 
} 

$query = 'SELECT * FROM aTable ORDER BY '.$order; 

// retrieve and show the data :) 
?> 

Hile yapmak gerekir: aslında oldukça kolaydır

+0

Hmm. Ayrıştırma hatası alıyorum: sözdizimi hatası, beklenmedik T_IS_EQUAL ilk 'if' ifadesi için – Joel

+1

Evet, sözdizimi muhtemelen mükemmel değil. Sanırım şimdi tamir edildi. – Kibbee

+0

Kendim düzenleyemiyorum, ancak hataları buldum. Ana bir sql değil sql sql ihtiyacınız var. Ayrıca, tablo adlarım çift sütunlarda farklı. Ancak, bunu yaptığınız için TEŞEKKÜR EDERİZ! Beni doğru cevapla yakaladı! Sözdizimi sorunlarını gidermek için – Joel

38

, burada olası bir yaklaşım bu! :)

+0

Neden -1 oy? düzenleme: -3 ..:/Neden !? –

+3

Kesinlikle ** NO ** olası SQL enjeksiyonu var, daha yakından bakın! Sipariş vermek için olası alanları beyaz listeye ekledi. –

+1

Reddetmedim, ama bir sebepten dolayı cevabını ilk gördüğümde orada olan çekleri hatırlamıyorum. Ancak, onu çok özlemiş olabilirim, bazıları da bunu kaçırmış olabilir. Tarzınızı benimkinden daha iyi seviyorum, bu yüzden size de bir vesile veriyorum. – Kibbee

1

BASİT TABLO SIRALAMA PHP KODU:

(birkaç değerleri, işlem ve sıralama için basit tablo, bu sortable.js komut kullanılarak)

<html><head> 
<script src="sorttable.js"></script> 

<style> 
tbody tr td {color:green;border-right:1px solid;width:200px;} 
</style> 
</head><body> 

<?php 
$First = array('a', 'b', 'c', 'd'); 
$Second = array('1', '2', '3', '4'); 

if (!empty($_POST['myFirstvalues'])) 
{ $First = explode("\r\n",$_POST['myFirstvalues']); $Second = explode("\r\n",$_POST['mySecondvalues']);} 

?> 

</br>Hi User. PUT your values</br></br> 
<form action="" method="POST"> 
projectX</br> 
<textarea cols="20" rows="20" name="myFirstvalues" style="width:200px;background:url(untitled.PNG);position:relative;top:19px;Float:left;"> 
<?php foreach($First as $vv) {echo $vv."\r\n";}?> 
</textarea> 

The due amount</br> 
<textarea cols="20" rows="20" name="mySecondvalues" style="width:200px;background:url(untitled.PNG);Float:left;"> 
<?php foreach($Second as $vv) {echo $vv."\r\n";}?> 
</textarea> 
<input type="submit"> 
</form> 

<table class="sortable" style="padding:100px 0 0 300px;"> 
<thead style="background-color:#999999; color:red; font-weight: bold; cursor: default; position:relative;"> 
    <tr><th>ProjectX</th><th>Due amount</th></tr> 
</thead> 
<tbody> 

<?php 
foreach($First as $indx => $value) { 
    echo '<tr><td>'.$First[$indx].'</td><td>'.$Second[$indx].'</td></tr>'; 
} 
?> 
</tbody> 
<tfoot><tr><td>TOTAL = &nbsp;<b>111111111</b></td><td>Still to spend = &nbsp;<b>5555555</b></td></tr></tfoot></br></br> 
</table> 
</body> 
</html> 

kaynağı php sortable table

0
//this is a php file 

<html> 
<head> 
<style> 
a:link {color:green;} 
a:visited {color:purple;} 
A:active {color: red;} 
A:hover {color: red;} 
table 
{ 
    width:50%; 
    height:50%; 
} 
table,th,td 
{ 
    border:1px solid black; 
} 
th,td 
{ 
    text-align:center; 
    background-color:yellow; 
} 
th 
{ 
    background-color:green; 
    color:white;  
} 
</style> 
<script type="text/javascript"> 
function working(str) 
{ 
if (str=="") 
    { 
    document.getElementById("tump").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("tump").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getsort.php?q="+str,true); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body bgcolor="pink"> 
<form method="post"> 
<select name="sortitems" onchange="working(this.value)"> 
<option value="">Select</option> 
<option value="Id">Id</option> 
<option value="Name">Name</option> 
<option value="Email">Email</option> 
<option value="Password">Password</option> 
</select> 
<?php 
$connect=mysql_connect("localhost","root",""); 
$db=mysql_select_db("test1",$connect); 
$sql=mysql_query("select * from mine"); 
echo "<center><br><br><br><br><table id='tump' border='1'> 
<tr> 
<th>Id</th> 
<th>Name</th> 
<th>Email</th> 
<th>Password</th> 
</tr>"; 
echo "<tr>"; 
while ($row=mysql_fetch_array($sql)) 
{?> 
<td><?php echo "$row[Id]";?></td> 
<td><?php echo "$row[Name]";?></td> 
<td><?php echo "$row[Email]";?></td> 
<td><?php echo "$row[Password]";?></td> 
<?php echo "</tr>"; 
} 
echo "</table></center>";?> 
</form> 
<br> 
<div id="tump"></div> 
</body> 
</html> 
------------------------------------------------------------------------ 
that is another php file 

<html> 
<body bgcolor="pink"> 
<head> 
<style> 
a:link {color:green;} 
a:visited {color:purple;} 
A:active {color: red;} 
A:hover {color: red;} 
table 
{ 
    width:50%; 
    height:50%; 
} 
table,th,td 
{ 
    border:1px solid black; 
} 
th,td 
{ 
    text-align:center; 
    background-color:yellow; 
} 
th 
{ 
    background-color:green; 
    color:white;  
} 
</style> 
</head> 
<?php 
$q=$_GET['q']; 
$connect=mysql_connect("localhost","root",""); 
$db=mysql_select_db("test1",$connect); 
$sql=mysql_query("select * from mine order by $q"); 
echo "<table id='tump' border='1'> 
<tr> 
<th>Id</th> 
<th>Name</th> 
<th>Email</th> 
<th>Password</th> 
</tr>"; 
echo "<tr>"; 
while ($row=mysql_fetch_array($sql)) 
{?> 
<td><?php echo "$row[Id]";?></td> 
<td><?php echo "$row[Name]";?></td> 
<td><?php echo "$row[Email]";?></td> 
<td><?php echo "$row[Password]";?></td> 
<?php echo "</tr>"; 
} 
echo "</table>";?> 
</body> 
</html> 



that will sort the table using ajax 
+0

Örneğin dinamik tablolarım varsa. Her kayıt veya satır farklı bir tablodur. Bu çözüm aynı şekilde çalışacak mı? –

1

Bu en basit çözüm kullanmak olduğunu:

// Sonra sadece sıralama O verilerinizin doğasına bağlıdır değişken

$sql="SELECT * FROM tracks ORDER BY $sort"; 

echo '<tr>'; 
echo '<td><a href="report_tracks.php?s=title">Title</a><td>'; 
echo '<td><a href="report_tracks.php?s=album">Album</a><td>'; 
echo '<td><a href="report_tracks.php?s=artist">Artist</a><td>'; 
echo '<td><a href="report_tracks.php?s=count">Count</a><td>'; 
echo '</tr>'; 
0

göre

$sort = $_GET['s']; 

// sayfa

yük üzerine ilk satırında olarak kullanın. Cevap, boyutuna ve veri tipine göre değişir. ORDER BY'a dayanan çok sayıda SQL çözümü gördüm. Javascript alternatifleri önermek istiyorum. Tüm cevaplar ise

, kimsenin gelecekteki tablo için sayfalama sorunu söz görmüyorum. Sizin için daha kolay hale getirelim. Tablonuzun sayfalandırması yoksa, javascript çözümünün her şey müşteriniz için düzgün ve temiz olmasını sağlar. Verileri koyduktan sonra bu tablonun patlayacağını düşünüyorsanız, sayfalandırma hakkında da düşünmeniz gerekir.(sıralama sütununu değiştirdiğinizde her seferinde ilk sayfaya gitmeniz gerekir)

Veri türü başka bir özelliktir. SQL kullanıyorsanız, verilerinizin türü ve bunun için ne tür bir sıralama paketi konusunda dikkatli olmanız gerekir. Örneğin, VARCHAR sütunlarınızdan birinde tamsayı numaraları kaydediyorsanız, sıralama tamsayı değerini hesaba katmaz: 1, 2, 11, 22 yerine 1, 11, 2, 22 alırsınız.

JQuery eklentilerini veya standalone javascript sortable tables adreslerini google'da bulabilirsiniz. HTML5'teki <table>'un sortable özniteliğine sahip olduğundan bahsetmeye değer, ancak görünüşe göre henüz uygulanmadı.