8791 sujets

Développement web côté serveur, CMS

Bonsoir à tous !

J'essai maintenant depuis plusieurs jours de créer une requête SQL de type select qui me permettra de sélectionner le ou les ID de ma table en fonction de plusieurs paramètres.

-> J'ai une table nommé "jeuxvideo" qui comporte plusieurs champs ( Nom, support, description, année, ect...)

En gros, j'aimerai que ma requête m'affiche tous les jeux correspondant aux champ sélectionnés par "where" ET contenant certains mots clés contenu dans une variable... Je sais c'est vraiment tordu Smiley sweatdrop

Voici ma requête :

$bdd->prepare('SELECT * FROM jeuxvideo WHERE support = $_POST['support'] AND genre = $_POST['genre'] " ..............."  ORDER BY année');


Qu'en pensez vous ? Smiley murf
Merci d'avance !
Modifié par xero (08 Oct 2012 - 22:56)
il faudra :

- découper le contenu de ta variable pour que ça ne devienne qu'une liste de mots
- pour chaque mots, faire un LIKE %mot% sur tous les champs que tu jugera nécessaire
xero a écrit :
En gros, j'aimerai que ma requête m'affiche tous les jeux correspondant aux champ sélectionnés par "where" ET contenant certains mots clés contenu dans une variable... Je sais c'est vraiment tordu Smiley sweatdrop


- Recherche fulltext (voir google)
- Solution de super_baloo (un peu lourd, pas optimisé et très approximatif)
- Moteur de recherche (type Lucene/Solr, mais je ça nécessite des compétence sous serveurs linux)

xero a écrit :
$bdd->prepare('SELECT * FROM jeuxvideo WHERE support = $_POST['support'] AND genre = $_POST['genre']  ORDER BY année');


- tu as un problème de quotes ici
- a quoi bon préparer une requête pour lui inscrire les valeurs en dur? ( voir doc PDO )
- évite les accents dans les noms de champs.
Merci à vous ! ok je vais m'orienter vers le fulltext et tester la méthode avec LIKE Smiley cligne

Mais qu'entends-tu par Quotes JJk801 (syntaxe, apostrophe, point)? je débute en php sorry Smiley sweatdrop

Voici ma requête contenant mes variables :

$req = $bdd->prepare('SELECT * FROM jeuxvideo WHERE support = ? AND genre = ? ORDER BY year');
$req->execute(array($_POST['support'], $_POST['genre']));


Requete avec LIKE :

$req = $bdd->prepare('SELECT * FROM jeuxvideo WHERE support = ? AND genre = ? LIKE \'%$mot%\' ORDER BY year');
$req->execute(array($_POST['support'], $_POST['genre']));


Il n'y a pas d'erreur mais elle me renvoie n'importe quel résultat en vrac..
Modifié par xero (09 Oct 2012 - 15:52)
le LIKE remplace le = et il doit être associé a un champ de ta base, là ta requête veut rien dire.

Et fulltext et LIKE, ce n'est pas pareil du tout, le LIKE te renverra une approximation, si tu fait monChamp LIKE '%mot%' il te renverra toutes les lignes ou monChamp contiendra la suite de caractère mot
Modifié par JJK801 (09 Oct 2012 - 18:00)
Oui tu avais raison JJK801, je commence à comprendre et j'ai fait quelques modifs dans ma requête préparée..

$req = $bdd->prepare("SELECT * FROM jeuxvideo WHERE (titre LIKE :recherche OR des LIKE :recherche) AND genre = :genr AND support = :sup ORDER BY year");

$req->execute(array(":recherche" => "%".$_POST['mot']."%", "genr" => $_POST['genre'], "sup" => $_POST['support']));



Apparemment sa fonctionne Smiley murf
Modifié par xero (09 Oct 2012 - 18:35)