Объедините два запроса SELECT, если один не найден

Я бы сделал это с интерфейсом IValidatableObject из System.ComponentModel.DataAnnotations, что позволяет добавлять дополнительные правила проверки, где вы можете сделать гораздо большую проверку. Добавьте интерфейс в свой класс, а затем внедрите метод Validate, где вы можете сравнить StartDateTime с текущей датой / временем, а также сравнить EndDateTime с StartDateTime, например

public class MyClass : IValidatableObject
{               
    [Required(ErrorMessage="Start date and time cannot be empty")]
    //validate:Must be greater than current date
    [DataType(DataType.DateTime)]
    public DateTime StartDateTime { get; set; }

    [Required(ErrorMessage="End date and time cannot be empty")]
    //validate:must be greater than StartDate
    [DataType(DataType.DateTime)]
    public DateTime EndDateTime { get; set; }       

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        List<ValidationResult> results = new List<ValidationResult>();

        if (StartDateTime < DateTime.Now)
        {
            results.Add(new ValidationResult("Start date and time must be greater than current time", new []{"StartDateTime"}));
        }

        if (EndDateTime <= StartDateTime)
        {
            results.Add(new ValidationResult("EndDateTime must be greater that StartDateTime", new [] {"EndDateTime"}));
        }

        return results;
    }     
}

. только потенциальный недостаток этого заключается в том, что Validate работает на стороне сервера, а не в проверке jQuery.

0
задан baileyJchoi 2 March 2019 в 08:13
поделиться

1 ответ

Вы можете сделать это в одном запросе, комбинируя ваши WHERE условия, а затем упорядочивая их в зависимости от того, какой из них соответствует:

SELECT * 
FROM users 
WHERE unique_code = :unique_code OR birthday = :birthday
ORDER BY unique_code = :unique_code DESC
LIMIT 1

Если уникальный код соответствует, unique_code = :unique_code будет равен 1, и так как мы сортируют DESCENDING, эта строка будет первой (и будет единственной строкой, оставшейся после предложения LIMIT. Если уникальный код не совпадает, то, если есть какие-либо строки, они должны совпадать в день рождения.

[ 117] Демонстрация по dbfiddle

0
ответ дан Nick 2 March 2019 в 08:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: