ошибка в вашем синтаксисе SQL - Получение этой ошибки и не может точно определить, где ошибка - PullRequest
0 голосов
/ 03 сентября 2010

Я создаю функцию поиска на своем веб-сайте, и у меня возникают проблемы с поиском ошибки в SQL.Существует четыре оператора SQL, которые используются для возврата значений одного и того же поиска с использованием ключевых слов AND и OR.Второй набор операторов SQL возвращает фактические результаты поисков AND и OR, ограниченных в соответствии с номером страницы текущего поиска.

Ниже я покажу функцию SQL для поиска и count, и и.Код для двух других операторов SQL точно такой же, только с использованием ИЛИ вместо AND.

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;


}

Любой совет будет принят с благодарностью.Спасибо, Арчи

Ответы [ 4 ]

4 голосов
/ 03 сентября 2010
 $search_and_sql = "SELECT DISTINCT tg_id COUNT(*) AS nb

пропущена запятая между tg_id и Count.

Рекомендуется показывать сгенерированный запрос, т.е. echo $ search_and_sql; до mysql_query

1 голос
/ 03 сентября 2010

Вы устанавливаете $count = 1 в начале каждой итерации цикла, а затем проверяете, если $count == 1, поэтому ваш SQL, вероятно, имеет дополнительный AND в конце.

0 голосов
/ 03 сентября 2010

Здесь нет ошибки?

SELECT DISTINCT tg_id COUNT(*) AS nb

Вы должны иметь "," между tg_id и COUNT (*)

Если ошибка не возникла, не могли бы вы повторить ваши запросы SQL и дать нам результат?

0 голосов
/ 03 сентября 2010

похоже, что $ count всегда равен 1 внутри цикла foreach, так что в итоге вы получаете конечный AND

...