Je construis une fonction de recherche sur mon site Web et j'ai quelques problèmes pour localiser une erreur dans le SQL. Quatre instructions SQL sont utilisées pour renvoyer les comptes de la même recherche en utilisant les mots clés AND et OR. Le second ensemble d'instructions SQL renvoie les résultats réels des recherches ET et OU limitées en fonction du numéro de page de la recherche en cours. Ci-dessous, je vais montrer la fonction SQL pour la recherche et count et et. Le code pour les deux autres instructions SQL est le même, en utilisant uniquement OU à la place de AND.erreur dans votre syntaxe SQL - Obtenir cette erreur et ne peut pas localiser où l'erreur est
function _and_count($words) {
require_once("include/conn.inc.php");
$arraysize = count($words);
$and_count_sql = "SELECT COUNT(DISTINCT tg_id)
FROM tg_keywords
WHERE tg_keyword=";
if ($arraysize > 1) {
foreach($words as $word){
$count = 1;
if ($count == 1){
$and_count_sql .= "'".$word."' AND ";
}
elseif ($count < $arraysize){
$and_count_sql .= "tg_keyword='".$word."' AND ";
}
else {
$and_count_sql .= "'".$word."'";
}
$count++;
}
} elseif ($words == 1) {
$and_count_sql .= "'".$words."'";
}
$and_count_result = mysql_query($and_count_sql)
or die(mysql_error());
return $and_count_result;
}
function _search_and($words, $startpos, $endpos) {
require_once("include/conn.inc.php");
$arraysize = count($words);
$search_and_sql = "SELECT DISTINCT tg_id COUNT(*) AS nb
FROM tg_keywords
LEFT JOIN tg_info
ON tg_info.tg_id=tg_keywords.tg_id
WHERE tg_keyword=";
if ($arraysize > 1){
foreach($words as $word) {
$count = 1;
if ($count == 1 && $count < $arraysize) {
$search_and_sql .= "'".$word."' AND ";
} elseif ($count == 1 && $count == $arraysize) {
$search_and_sql .= "'".$word."'";
} elseif ($count < $arraysize) {
$search_and_sql .= "tg_keyword='".$word."' AND ";
} elseif ($arraysize == $count) {
$search_and_sql .= "'".$word."'";
}
$count++;
}
} elseif ($arraysize == 1) {
$search_and_sql .= "'".$words."'";
} else {
$search_and_sql .= "''";
}
$search_and_sql .= "GROUP BY tg_id
ORDER BY nb DESC, tg_info.date_added ASC
LIMIT ".$endpos." OFFSET ".$startpos;
$search_and_result = mysql_query($search_and_sql, $link)
or die(mysql_error());
$and_array = mysql_fetch_array($search_and_result);
return $and_array;
}
Un conseil serait grandement apprécié. Merci Archie
Quelle erreur obtenez-vous? – dionyziz
Quelle base de données? Affiche le résultat SQL String qui est créé. – JeffO
Pourquoi faire un AND au lieu d'un IN? – XstreamINsanity