#php #mysql #sql #database
#php #mysql #sql #База данных
Вопрос:
У меня есть две таблицы table1 и table2
таблица 1 со следующими столбцами (id,date_reg,status)
date_reg — это тип данных varchar, имеющий формат даты, подобный этому (mm-dd-yyyy)
.
И table2 со следующими столбцами (id,uname,date_reg)
date_reg — это тип данных varchar, имеющий формат даты, подобный этому (mm-dd-yyyy)
.
Мне нужны сопоставленные записи с последней датой (путем сравнения table1.date_reg
с table2.date_reg
)
Комментарии:
1. Есть ли особая причина
date_reg
, по которой столбец не является aDATE
?2. Пожалуйста, покажите примеры данных и желаемые результаты. Вы должны быть в состоянии просто выполнить a
join
для двух полей, если вы ищете равенство.3. я думаю, что люди используют to like
varchar
fordate
, потому что операция onvarchar
проста в обращении, чем операцияdate
type4. Вероятно, вам придется использовать что-то вроде STR_TO_DATE() , но это невероятно быстро обойдется во многих строках. Почему они не хранятся как a
DATE
?5. @rock321987 Иногда то, что поначалу кажется проще, в конечном итоге оказывается гораздо более сложным, раздражающим и громоздким. Часто лучше растянуть немного раньше, а затем иметь возможность использовать уже проделанную работу.
Ответ №1:
Попробуйте это
SELECT *
FROM table1,
table2
WHERE STR_TO_DATE(table1.date_reg, '%m/%d/%Y')=STR_TO_DATE(table2.date_reg, '%m/%d/%Y')
Комментарии:
1. Это должно было
'%m-%d-%Y'
бы соответствовать его примеру.2. Я пробовал это, но все еще не сравнивал должным образом
3. В чем проблема в запросе? Если у вас есть какие-либо ошибки, дайте мне знать.
4. результаты поступают не так, как ожидалось.. Мне нужна недавняя дата от обоих, поэтому я дал вот так
CASE WHEN DATE(DATE_FORMAT(table1.date_reg,'%m-%d-%Y 00:00:00')) < DATE(DATE_FORMAT(table2.date_reg,'%m-%d-%Y 00:00:00')) THEN table1.date_reg ELSE table2.date_reg END recentDate
5. любой, как я буду признателен за ваш ответ.
Ответ №2:
Я не знаком с синтаксическим анализом регулярных выражений / текста в PHP, но общей стратегией было бы разделить ваши две строки на ‘-‘, затем сравнить год, затем месяц, а затем день. В псевдокоде:
if table1.year > table2.year:
return table1.date
else if table1.year < table2.year:
return table2.date
else:
if table1.month > table2.month:
return table1.date
else if table2.month > table1.month:
return table2.date
else:
if table1.day > table2.day:
return table1.date
else if table2.day > table1.day:
return table2.date
else:
return 0
Ответ №3:
используйте следующее, если формат даты одинаков:
выберите * из таблицы1 слева присоединиться к таблице2 НА table1.date_reg = table2.date_reg
или, если вы хотите, чтобы условие where тогда
выберите * из таблицы1 слева присоединиться к таблице2 НА table1.date_reg = table2.date_reg где table1.date=’06-05-2014′
Ответ №4:
Вы могли бы использовать STR_TO_DATE()
функцию MySQL, чтобы превратить ваши VARCHAR
поля в действительную дату, которую вы можете использовать для сравнения, например:
STR_TO_DATE(table1.date_reg, '%m-%d-%Y')
В идеале, однако, вы не хотите этого делать. Это не решение, это еще одна проблема, которая используется, чтобы попытаться скрыть существующую проблему, ваши даты сохраняются как VARCHAR
, а не как DATE
.
Вам было бы гораздо лучше изменить свой код импорта, чтобы импортировать даты из Excel (или откуда бы вы ни импортировали) в правильный DATE
формат для MySQL. Если вы не уверены, как это сделать, я бы предложил создать новый вопрос с кодом, который вы используете для импорта данных, и спросить, как правильно его отформатировать.