-1

私は自分のウェブサイトにphpmyadmin3.5.2、codeigniter2.1を使用しています。

私の問題は、正確な日に追加された投稿を読み込もうとしたとき、またはその投稿の日付/時刻のみを表示したいときに発生します。

テーブル構造

CREATE TABLE IF NOT EXISTS `posts` (
  `post_id` int(11) NOT NULL AUTO_INCREMENT,
  `patient_id` int(11) NOT NULL,
  `worker_id` int(11) NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `stats` varchar(20) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`post_id`),
  KEY `worker_id` (`worker_id`,`patient_id`),
  KEY `patient_id` (`patient_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=2 ;

私の問題は、たとえば表示する必要があるため、この「時間」列を操作することです

1)今日の投稿を示す表(使用中

Select * from posts where date(`time`) = date(NOW())

2)今日の投稿を表示するテーブルですが、時間列は(TIME)のみを返します。これが、私の主な問題です。

select time from posts

日付と時刻の両方を返します。その列から時刻のみを返したいのですが、それでも使用できます。

where date('time') =date(now()) condition !.

だから、これを行うためのより良い方法はありますか?たとえ私がphpでこれを行うことができたとしても、それでも私はうまくいきます!。

または、時刻と日付の両方を2つの異なる列に分割した方がよいでしょうか。

--------質問の2番目の部分はcodeigniter用です----------

モデル

$this->db->select('patients.name,workers.dr_name,time(posts.time),posts.stats');
$this->db->from('posts');
$this->db->join('workers','posts.worker_id=workers.worker_id','left');
$this->db->join('patients','posts.patient_id=patients.patient_id','left');
$this->db->where('date(`time`) = date(NOW())');
return $this->db->get();

コントローラ

$this->load->model('Posts_model');
$q=$this->Visits_model->allvisits;
$this->load->library('table');
$this->load->view('welcome_message');
$qq=$q->result_array();
$qq=array('patient','Doctor','Time','Stats');   
$this->table->set_heading($qq);
$this->table->set_caption('Todays Posts');
echo $this->table->generate($q);

モデルの最後のwhere条件(date = Now)を削除し、phpを使用してこのインスティードを並べ替えるにはどうすればよいですか?結果をループする必要がありますか?またはそれを行うためのよりクリーンな方法はありますか?ありがとう

4

1 に答える 1

2

MySQL のDATE()関数がDATEa の一部のみを返すようTIMESTAMPに、そのTIME()関数はTIME一部のみを返します。

SELECT TIME(time) FROM posts WHERE DATE(time) = CURRENT_DATE
于 2012-12-05T15:37:19.957 に答える