/ / ORDER BY instruction SQL dynamique via PHP - php, sql, order, sql-order-by

ORDER BY instruction SQL dynamique via PHP - php, sql, order, sql-order-by

J’ai un script PHP qui reçoit des valeurs de la forme HTML, puis en fait une déclaration SQL.

Tout fonctionne bien, même si je veux ajouter ORDER BY ainsi que des cases à cocher. Tout va bien sous forme HTML, mais quand il s’agit de faire une déclaration SQL, je ne peux pas le faire fonctionner.

J'ai des colonnes nommées col1, col2, ... ,col5 Déclaration

... ORDER BY x, y, z, i, j;

fonctionne comme ceci: si la case à cocher pour col1 est checked puis x = col1 et pour le reste, c’est la même chose. Ce qui ne marche pas, c’est quand je ne coche pas certaines cases - par exemple, je veux seulement ORDER BY col1 et col4, je les vérifie donc toutes les deux et la déclaration produit

ORDERY BY col1, y, z, col4, j

mais j'ai aussi vérifier si une case à cocher pour col1 est empty, et si c’est le cas, cela change la valeur de x à et ici, je déclare que j’ai essayé de mettre 1=1, NULL, col1 chaque fois qu'une case à cocher n'est pas cochée (et pour le reste c'est la même chose y,z,i,j).

Il me faut donc un moyen intelligent de faire en sorte que la déclaration fonctionne comme elle est supposée être.

Quand j'ai changé toutes les valeurs de x, ..., j chaque fois qu'une boîte était vide pour 1=1 la déclaration a fonctionné pour seulement 1 case cochée, mais quand j’ai coché 2 - cela n’a pas été commandé par eux.

Réponses:

1 pour la réponse № 1

Pourquoi ne pas simplement laisser une colonne en dehors si la case à cocher correspondante n’est pas cochée?

$sql = "SELECT * FROM table";
$ordercolumns = array();
if (isset($_POST["col1"])) {
$ordercolumns[] = "x";
}
...
if (isset($_POST["col5")) {
$ordercolumns[] = "j";
}
if (sizeof($ordercolumns) > 0) {
$sql .= " ORDER BY " . implode(",", $ordercolumns);
}