2013-04-06 101 views
-2

我有一個顯示記錄明智的系統。我有用戶選擇年份的下拉菜單,我將該值存儲在變量$year中。所以現在當$year = 2013-2014,它不應該顯示2014-2015年的記錄。順便說一句,當我插入我的contractNumber時,我也插入用戶在登錄時選擇的年份。例如contractNumber = 1#2013-2014在php中顯示特定年份的記錄mysql mysql

我嘗試這樣的查詢:

SELECT * FROM contract WHERE contarctNumber RLIKE "^$year"; 

現在,當我選擇2014 - 2015年一年,但仍從2013-2014年顯示的所有記錄。

有什麼建議嗎?

+2

這是一個PHP的問題或數據庫設計?你沒有與每份合同有關的時間戳字段嗎? – Mawg 2013-04-06 07:53:59

+0

這是PHP的問題。不,我沒有時間戳字段。但我確實有contractDate字段,它是由用戶手動插入的。 – ashah142 2013-04-06 08:02:28

+1

@ ashah142你應該將你的日期轉換爲int(unix timestamp)或者mysql日期類型。否則,如果數據庫增長,「LIKE」操作將需要很長時間。此外,爲什麼不使用ISO8601日期,所以你至少要讓它們可排序(以及更有效的搜索索引)? – 2013-04-06 08:08:39

回答

1

嘗試此查詢

SELECT * FROM contract WHERE contarctNumber LIKE "%$year"; 

SQLFiddle DEMO

CREATE TABLE test (contarctNumber varchar(25)); 
INSERT INTO test VALUES ('1#2013-2014'), ('1#2014-2015'), ('2#2014-2015'); 

選擇查詢

SELECT * FROM test WHERE contarctNumber LIKE "%2014-2015"; 

輸出

| CONTARCTNUMBER | 
------------------ 
| 1#2014-2015 | 
| 2#2014-2015 | 
+0

我試過,但是,當我選擇2014-2015年時,它仍然顯示2013-2014年的記錄,因爲它們都具有2014年的共同點。 – ashah142 2013-04-06 07:57:12

+1

@ ashah142不,它不會,你可以在這裏查看演示http://www.sqlfiddle.com/#!2/45ea9/1 – 2013-04-06 08:07:14

+0

它似乎在這裏工作,但'%$ year'它仍然顯示記錄從2013年至2014年。 – ashah142 2013-04-06 08:11:56

0

如果contractNumber總是在日期範圍結束,爲什麼不使用:

SELECT * FROM contract WHERE contarctNumber LIKE "%$year"; 

這意味着它會選擇$year之前匹配任何東西,但仍符合規定的範圍。

選項#2:

SELECT * from contract where RIGHT(contarctNumber, 9) = '$year'; 
+0

我試過,但是,當我選擇2014-2015年時,它仍然顯示2013-2014的記錄,因爲它們都有'2014' – ashah142 2013-04-06 07:56:46

+0

'-'不是特殊字符在'like'命令中,所以聲明應該可以工作。什麼類型的字段是'contractNumber'?您可能想嘗試'BINARY LIKE「%$ year」' – Jon 2013-04-06 08:01:55

+0

contarctNumber是varchar。所以我猜二元樣不是一個選項。 – ashah142 2013-04-06 08:04:56