2013-04-06 3 views
-2

У меня есть система, которая показывает год записи года. У меня есть раскрывающееся меню, из которого пользователь выбирает год, и я сохраняю это значение в переменной $year. Итак, теперь, когда $year = 2013-2014, он не должен отображать записи 2014-2015 годов. Кстати, когда я вставляю свой номер контракта, я также вставляю год, который пользователь выбрал во время входа. например contractNumber = 1#2013-2014.отображает записи определенного года в php mysql

Я попытался это запросы:

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

Теперь, когда я выбираю 2014-2015 год, она по-прежнему отображаются все записи с 2013-2014 года.

Любые предложения?

+2

Является ли это PHP вопрос или дизайн базы данных? У вас нет поля временной метки, связанного с каждым контрактом? – Mawg

+0

Это вопрос PHP. и нет, у меня нет поля времени. Но у меня есть поле contractDate, которое вводится пользователем вручную. – ashah142

+1

@ ashah142 вы должны преобразовать свои даты в int (временная отметка unix) или тип даты mysql. В противном случае, если ваша база данных будет расти, операции «LIKE» потребуют возраста. Кроме того, почему бы не использовать даты ISO8601, чтобы вы, по крайней мере, могли их сортировать (и более эффективные индексы для поиска)? –

ответ

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

+1

@ ashah142 нет, это не поможет, вы можете проверить демо здесь, http://www.sqlfiddle.com/#!2/45ea9/1 –

+0

, похоже, здесь работает, но с «% $ year» он все еще показывает записи с 2013-2014 гг. – ashah142

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

+0

' -' не является особым символом в команде 'like', поэтому инструкция должна работать. Какой тип поля 'contractNumber'?Вы можете попробовать «BINARY LIKE»% $ year »' – Jon

+0

contarctNumber является varchar. поэтому я думаю, что BINARY LIKE не вариант. – ashah142

Смежные вопросы