J'ai un tableau comme ci-dessous, le nom de la table est js_skills_achievements
id skill1 skill2 skill3 skill4
1 java php html android
2 php java jquery html
3 sql php html jquery
Lorsque la clé de recherche de l'administrateur est "développeur java dans nersupalli"
Ma requête est ci-dessous
SELECT *
FROM `js_skills_achievements`
WHERE `skill1` LIKE '%java developer in nersupalli%'
OR `skill2` LIKE '%java developer in nersupalli%'
OR `skill3` LIKE '%java developer in nersupalli%'
OR `skill4` LIKE '%java developer in nersupalli%'
ORDER BY id DESC
LIMIT 10
Ça ne fonctionne pas pour moi . Ma condition est que je dois afficher tous les enregistrements Java. ici un total de 2 enregistrements en java. c'est-à-dire id1, id2. Mais je reçois des lignes vides.
Ci-dessous les moyens ne fonctionnent que
SELECT *
FROM `js_skills_achievements`
WHERE `skill1` LIKE '%java%'
OR `skill2` LIKE '%java%'
OR `skill3` LIKE '%java%'
OR `skill4` LIKE '%java%'
ORDER BY id DESC
LIMIT 10
J'ai besoin en fonction de la recherche par mot-clé spécifiée par chaîne. pouvez-vous quelqu'un s'il vous plaît aider à ce sujet. Suis très apprécié. Merci
5 réponses
Ajoutez du texte intégral dans votre champ
ALTER TABLE `js_skills_achievements` ADD FULLTEXT(`skill1`);
ALTER TABLE `js_skills_achievements` ADD FULLTEXT(`skill2`);
ALTER TABLE `js_skills_achievements` ADD FULLTEXT(`skill3`);
ALTER TABLE `js_skills_achievements` ADD FULLTEXT(`skill4`);
Et puis exécutez cette requête
SELECT * FROM js_skills_achievements
WHERE MATCH(skill1,skill2,skill3,skill4) AGAINST ('java developer in nersupalli');
SELECT *
FROM `js_skills_achievements`
WHERE '%java developer in nersupalli%' LIKE CONCAT('%',skill1,'%')
OR '%java developer in nersupalli%' LIKE CONCAT('%',skill2,'%')
OR '%java developer in nersupalli%' LIKE CONCAT('%',skill3,'%')
OR '%java developer in nersupalli%' LIKE CONCAT('%',skill4,'%')
ORDER BY id DESC
LIMIT 10;
D'autres réponses sont plus techniques et probablement plus optimisées, mais si vous souhaitez avoir un contrôle total sur votre requête, comme changer OR en AND et des choses comme ça, vous pouvez diviser votre requête en mots et la construire manuellement:
//your search query
$query = 'java developer in nersupalli';
//in case you want to add more skills later
$skills = ['skill1', 'skill2', 'skill3', 'skill4'];
//split your query in an array of words
$words = explode(' ', $query);
//build the sql
$condOuter = '';
foreach($skills as $skill){
$condInner = '';
foreach($words as $word){
$condInner .= " OR `$skill` LIKE '%$word%'";
}
$condInner = substr($condInner, 4);
$condOuter .= " OR ($condInner)";
}
$condOuter = substr($condOuter, 4);
$sql = 'SELECT * FROM `js_skills_achievements` WHERE ' . $condOuter . ' ORDER BY id DESC LIMIT 10;';
Vous pouvez exploser la chaîne de recherche sur un espace
$words = explode ( ' ' , $string);
Que rechercher tous les mots dans skill1. Tous les mots de skill2 etc.
Une façon un peu moche de faire cela est d'inverser vos clauses similaires et de faire correspondre votre chaîne à des colonnes
SELECT
*
FROM
js_skills_achievements
WHERE 'java developer in nersupalli' LIKE CONCAT('%',skill1,'%')
OR 'java developer in nersupalli' LIKE CONCAT('%',skill2,'%')
OR 'java developer in nersupalli' LIKE CONCAT('%',skill3,'%')
OR 'java developer in nersupalli' LIKE CONCAT('%',skill4,'%')
OR skill1 LIKE '%java developer in nersupalli%'
OR skill2 LIKE '%java developer in nersupalli%'
OR skill3 LIKE '%java developer in nersupalli%'
OR skill4 LIKE '%java developer in nersupalli%'
ORDER BY id DESC
LIMIT 10
De nouvelles questions
php
PHP est un langage de script largement utilisé, de haut niveau, dynamique, orienté objet et interprété, principalement conçu pour le développement Web côté serveur. Utilisé pour les questions sur le langage PHP.