簡體   English   中英

MySQL選擇表列31-12-2014類型varchar作為按日期排序的日期php

[英]MySQL select table column 31-12-2014 type varchar as date order by date php

由於設計原因,我有一個帶有3個選擇下拉菜單(日,月和年)的表單,我加入了日期,然后使用Post(d)Post m Post(Y)將日期保存到mysql中,然后插入日期,例如$ d- $ m- $ Y從表單方法發布我將日期保存在加入dmY的varchar 20列中,並且保存得很好

日期顯示正常30-10-2014

現在的問題是,我想在搜索結果頁面中搜索日期A到B之間的結果,並獲取任何內容

另外,在搜索結果中,我按日期排序,我得到的結果來自任何日期

我不知道如何使用保存在varchar中的這種日期來排序或過濾結果,這是我現在正在測試的內容

$result = mysqli_query($db, "SELECT product, price, DATE_FORMAT(date, '%d-%m-%Y') AS new_date FROM `tableone` WHERE `user` = '$usernamefromform' ORDER BY `new_date` DESC Limit $start, $per_page");

我如何才能解決此問題而又無需特別更改而不是我的設計

您的方向正確,但是在定義DATE_FORMAT之前,需要將VARCHAR轉換為日期。 此外,您需要以一種可以對日期進行正確排序的方式來格式化日期(因此只能由ORDER BY ),但是要以存儲日期的方式顯示日期(如果您要這樣做):

SELECT product, price, date 
FROM `tableone` 
WHERE `user` = '$usernamefromform' 
ORDER BY DATE_FORMAT(STR_TO_DATE(date, '%d-%m-%Y'), '%Y%m%d') DESC

構造一個帶有這樣的BETWEEN查詢確實很糟糕(可能會減慢一切),但是當您將VARCHAR轉換為DATE ,現在可以使用以下查詢:

SELECT product, price, date 
FROM `tableone`
WHERE `user` = '$usernamefromform' AND (date BETWEEN '2014-01-30' AND '2014-12-31')
ORDER BY date DESC

將日期以DD-MM-YYYY格式存儲在varchar中是一個非常糟糕的主意。 這使您無法按日期排序或搜索兩個日期之間的日期。

如果將其更改為YYYY-MM-DD格式並將其存儲在日期字段中,它將解決所有問題:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM