1

こんにちは私は、year_startとyear_endであるデータベースのフィールドまでの1年を検索するコードを持っています。

そして、これが私のコードです。

  SELECT * from $tableName where '$year' BETWEEN start_year AND end_year; LIMIT $start, $limit

これで、年がend_year値と等しい場合を除いて、これは正常に機能しているようです。たとえば、2002を検索していて、終了年の値が2002の場合、結果は返されません。

任意の提案をいただければ幸いです。

ありがとう

4

2 に答える 2

1

タイプstart_yearが_end_year

INT

$sql = '
SELECT *
FROM '.$tableName.'
WHERE TRUE
  AND '.$year.' BETWEEN start_year AND end_year
LIMIT '.$start.', '.$limit.'
;
';

日にち

$sql = '
SELECT *
FROM '.$tableName.'
WHERE TRUE
  AND '.$year.' BETWEEN YEAR(start_year) AND YEAR(end_year)
LIMIT '.$start.', '.$limit.'
;
';


それらをキャストする必要があるVARCHAR

$sql = '
SELECT *
FROM '.$tableName.'
WHERE TRUE
  AND '.$year.' BETWEEN
    CAST(start_year AS UNSIGNED) AND CAST(end_year AS UNSIGNED)
LIMIT '.$start.', '.$limit.'
;
';
于 2012-11-21T16:43:51.950 に答える
0

クエリを実行する前に、start_year と end_year を比較するだけです。

// If they're the same,
If start_year == end_year{
  select * from $tableName where '$year' = start_year; LIMIT $start, $limit;
  // more code
}

// if not, use your query
else{
  SELECT * from $tableName where '$year' BETWEEN start_year AND end_year; LIMIT $start, $limit;
  // more code
}

最も美しい解決策ではありませんが、それでも良い回避策です。

于 2012-11-21T16:42:21.343 に答える