SQLとPHPを組み合わせる

php sql sql-order-by
SQLとPHPを組み合わせる
$months = array('January', ... , 'December');
$sql='
SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY array_search($months,`MonthFrom`) `DayFrom`';

動作しません(私はすでに恐れています)、要素は最初に配列$ monthsのMonthFromの位置でソートされ、同じ位置にあるものはDayFromでソートされるはずです。 私は日付を処理する他の方法があることを知っていますが、このクエリではこの日付構造にバインドされているので、助けてください

  0  0


ベストアンサー

$month_arr = array("January","February","March");

$months = implode("', '", $month_arr);

$query="SELECT * FROM residencies WHERE year = 2010 ORDER BY FIELD('MonthFrom', '$months'), `DayFrom`;

3


$sql='
SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY DATE_FORMAT(`MonthFrom`,"%M") `DayFrom`';

しかし、これは月の名前のアルファベット順に従ってそれらをソートしますか? 本当に必要ですか?

また、 `MonthFrom`に従ってソートし、PHPコード内のテキストに変換することもできます。”

1


SQLステートメント内でPHP関数を使用しようとしているようです。 月の名前であるMonthFromでソートする必要がある場合は、次のようなものを試してください。

SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY FIELD(`MonthFrom`, 'January', ..., 'December'), `DayFrom`;

(残りの月は記入できます)

1


私は、他のコメント者が言ったように、文字列形式で保存されたデータベースに月フィールドがあるという質問から推測します。これはソートをトリッキーにするため、なぜ配列を使用して月を整理しようとしたのですか?

他の人はその制約を与えてこれを達成するための有効な方法を考え出しました(幸運なタクシーの答えはこれまでのところおそらく最高だと思います)が、文字列形式でデータベースに月を保存しているなら、間違いなく貧しい人がいると言いますデータベース設計、およびオプションがある場合は、変更を検討する必要があります。

MySQLはDATEまたはDATETIMEデータ型を使用して完全な日付を保存できます。したがって、表示された時点で日、、年を別々に保存する場合は、それらを1つのフィールドに一緒に保存するように変更する必要があります。 たとえば、月だけが必要な場合、または任意の組み合わせで、それらを個別に照会できます。MySQLには非常に強力な日付処理機能があります(PHPも同様です)。

1


タイトルとURLをコピーしました