Regardez sur ce tableau s'il vous plaît
select `id` from `table` where `name` = 'something' and `order` = any value
10 Réponses :
Eh bien, c'est une sorte de hack, mais si vous avez vraiment besoin de le faire, cela fonctionnera comme ceci: alors vous dites simplement "partout où l'ordre est le même comme lui-même ", il est donc toujours vrai. p> p>
Je considérerais cette modification de la structure, car la syntaxe à faire référence à un champ n'est pas la même que celle pour faire référence à une chaîne.
Ce n'est pas la bonne façon de le faire. Le code PHP doit être ajusté.
Non, ce n'est pas possible. Vous devez changer la structure (éventuellement à une personne comme vous pouvez utiliser «%», mais c'est très laid).
Cependant, vous n'avez pas besoin d'écrire une requête différente pour gérer toutes les combinaisons possibles. Vous pouvez simplement créer la requête de manière dynamique: p> Notez que vous devez bien sûr prendre des mesures appropriées pour éviter l'injection SQL et d'autres problèmes de sécurité - je n'ai pas inclus cela ici dans l'ordre garder les choses simples. p> p>
Qu'est-ce que l'injection SQL? Peut-être parlez-vous de mysql_real_escape_string () et de telles fonctions? Je ne comprends pas le sens de "Injection SQL"
@Syom: L'injection SQL est l'acte de fournir des données qui affectent la structure de la requête, ce qui lui faisait faire autre chose que ce qu'il était censé faire. mysql (i) _real_scape_string est en effet ce que la plupart des gens utilisent pour empêcher que (bien que des requêtes paramétrées parlent strictement une meilleure approche, mais c'est un sujet différent). Si vous voulez en savoir plus, il y a beaucoup de bonnes ressources, à la fois activées et disponibles via Google. Tout ce que j'essaie de dire, c'est que vous devez toujours vous rappeler de faire ce genre de chose lors de la construction de manière dynamique.
Si vous utilisez des paramètres liés, il serait impossible.
Si vous remplacez simplement les valeurs, vous pouvez effectuer les éléments suivants: P>
select `id` from `table` where `name` = 'something' and `order` = `order`
Je ne pense pas que vous ayez un choix ... Une fois que vous avez une sélection, vous ne pouvez pas "non filtrer" et obtenir plus de lignes. P>
Vous devez simplement utiliser deux questions-- soit deux requêtes indépendantes, soit une autre qui sélectionne sur le nom dans une table Temp, puis (éventuellement) celle qui sélectionne en outre sur l'attribut de commande. P>
Comme Tchad dit ci-dessus, il suffit de régler la colonne égale à elle-même. Mais soyez prudent, sur certaines plateformes / configurations d'installation, NULL! = NULL:
select `id` from `table` where `name` = 'something' and coalesce(`order`,'') = coalesce(`order`,'')
Null! = NULL est en fait le comportement attendu, tel que défini dans la norme SQL.
Il s'agit d'un thème commun avec les requêtes de base de données - vous avez besoin d'une requête variable en fonction de la quantité de filtrage que vous souhaitez appliquer aux données qu'il utilise. Vous pouvez utiliser la voie d'avoir votre requête répétée comme une chaîne dans votre code, mais c'est une mauvaise pratique car elle augmente inutilement la complexité du code. Les chances d'erreurs se produisent si vous devez modifier la requête pour une raison quelconque et devez le modifier à plusieurs endroits.
La meilleure solution consiste à créer une fonction qui construit la requête pour vous exécuter: P>
$query = buildMyQuery("somename", "someorder");
sur la réflexion, j'ai une meilleure réponse. Mon collègue m'a montré une façon que cela puisse être fait.
mon exemple ... p> Les variables doivent être identiques. P> si elles sont les deux 5 par exemple, le premier booléen sera faux, mais le second sera vrai, pour les lignes où l'identifiant des utilisateurs est 5. p> si vous avez besoin de "tous", régler comme une chaîne vide aboutir à toutes les lignes consenties à respecter la situation de la clause Où. p> p>
Vous ne pouvez pas simplement utiliser un NON NULL code> interrogateur ici?
$sql = "SELECT * FROM auctions WHERE id = id ";
if ($category !== "ANY") {
$sql .= "AND category = $category "; }
if ($subcategory !== "ANY") {
$sql .= "AND subcategory = $subcategory "; }
if ($country !== "ANY") {
$sql .= "AND country = $country "; }
$sql .= "ORDER BY $order $sort LIMIT $limit OFFSET $offset";
Merci pour ce code Snippet, qui pourrait fournir une aide limitée et immédiate. Un Une explication appropriée améliorerait considérablement sa valeur à long terme en montrant pourquoi il s'agit d'une bonne solution au problème et de Rendez-le plus utile pour les futurs lecteurs avec d'autres questions similaires. S'il vous plaît Modifier Votre réponse Pour ajouter une explication, y compris les hypothèses que vous avez apportées.
Vous devriez pouvoir le faire comme ceci: qui sélectionnera n'importe où la valeur n'est pas égale à vide. p> p>
Je changerais la façon dont vous construisez vos requêtes ...