Tri d'une requête MySQL avec la COMMANDE PAR ou avec PHP fonctions de tri
J'ai une requête que je veux trier par ordre alphabétique, mais le truc c'est que je veux le tri pour traiter les deux colonnes égales. Par exemple, si la première ligne de first_col
est égal à apple
et la deuxième rangée de second_col
est égal à aardvark
je veux la valeur de la deuxième ligne de second_col
pour être listé avant la valeur dans la première ligne de first_col
. Une valeur (pas NULL
ou ''
) va toujours exister dans chaque ligne de second_col
, mais la valeur en first_col
peut être ''
. J'espère que je l'ai expliqué assez bon. Je ne m'inquiète pas si je dois utiliser MySQL ou PHP pour cela, mais une fois triés, le tableau est lu et fait écho dans un tableau HTML. Toutes les pensées?
MODIFIER
C'est ce que j'ai pour le code de la droite maintenant. Dans ma requête MySQL j'ai besoin de b_name
et l_name
être égaux. La colonne b_name
n'ont pas toujours une valeur. Quand j'ai mis les valeurs dans la table, il est fondé sur l'existence de b_name
. Si b_name
n'existe pas de f_name
et l_name
sont combinés pour remplacer b_name
.
$query = "SELECT * FROM customers ORDER BY b_name, l_name";
$result = mysql_query($query);
mysql_close($link);
$num = mysql_num_rows($result);
for ($i = 0; $i < $num; $i++){
$row = mysql_fetch_array($result);
$class = (($i % 2) == 0) ? "table_odd_row" : "table_even_row";
if($row[b_name]!=''){
echo "<tr class=".$class.">";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[c_id]."</a></td>";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[b_name]."</a></td>";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[phone]."</a></td>";
echo "</tr>";
}
else{
echo "<tr class=".$class.">";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[c_id]."</a></td>";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[f_name]." ".$row[l_name]."</a></td>";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[phone]."</a></td>";
echo "</tr>";
}
}
?>
</table>
- Si la première ligne est
'a','b'
et la deuxième ligne est'b','a'
et les deux colonnes sont traités de la même façon de ces lignes devrait venir en premier et pourquoi? - Nous montrer la requête. En général, le seul moyen fiable de l'utilisation de deux colonnes en une seule pour le tri nécessite l'utilisation d'un SYNDICAT
Vous devez vous connecter pour publier un commentaire.
Si vos tables sont très similaires, vous pouvez le faire
Dans mon cas, j'ai une table
test_a
avec 2 colonnesid
etname
Votre question n'est pas complètement clair, mais vous pouvez essayer d'utiliser la clause ORDER BY:
Démonstration:
first_col
est toujours prioritaire, donc tout desecond_col
finit au bas de la liste.ORDER BY first_col, second_col
. Ce n'est pas le même.first_col
sont''
sorte que tous ceux qui les valeurs en haut de la liste, triée par la valeur desecond_col
alors que toutes les valeurs dans lafirst_col
fin triés parmi eux-mêmes au bas de la liste.Essayer
ou (si tes champs sont NULS quand il est VIDE)
Comme on dit ci-dessus, l'UNION de TOUS est votre ami, et, bien sûr, si vous avez seulement une table, vous pouvez toujours le faire:
Donc, vous demandez deux différentes lignes de la même table, et le commandant, comme il l'était.
Merci à tous pour votre aide les gars, mais aucun de vos réponses m'ont permis de trier les données ET l'écho dans le code HTML du tableau correctement une fois triés. Un
UNION
pourrait avoir fonctionné, mais je pense que ma solution a été plus rapide que la mesure de trouver tout va.array_multisort
et repris dans un tableau exactement comme je le voulais. Comment tout cela est-il mauvais ou plus stressant sur un serveur qu'une autre alternative (ce qui serait le plus susceptible d'exiger de moi de restructurer la base de données)?