2010-03-09 2 views
0

Для тех из вас, кто действительно делит с RETS, может дать мне руку здесь. Проблема возникает, когда несколько свойств привязаны к данным RETS, даже если свойство продано. В основном мне нужно проверить базу данных с помощью инструкции SELECT для трех полей. Эти поля будут C_StreetName, C_StreetNumber и C_PostalCode.MySQL Query Nightmare с данными RET

Чтобы сделать это ясно, что я хочу, это способ проверки дубликатов при сборе набора данных, это невозможно сделать в php из-за того, как данные возвращаются через приложение. Поэтому, если он найдет другую запись с тем же именем C_StreetName, C_StreetNumber и C_PostalCode, она удалит их из набора данных. В идеале было бы неплохо, если бы он мог также проверить статус двух, чтобы узнать, если он был истек или продан, прежде чем удалять их из данных.

Я не знаком со сложными функциями SQL, я искал оператор IF до тех пор, пока не нашел, что можно использовать только при хранении данных не наоборот. И заявление CASE, но это просто не похоже, что это сработает.

Если у вас есть какие-либо предложения относительно того, что я должен использовать, я был бы признателен. Надеюсь, есть способ сделать это, и имейте в виду, что это только одна таблица, к которой я обращаюсь. У меня нет никаких объединений.

Заранее спасибо.

ответ

0

Вот что вам нужно в правильном направлении. Я не тестировал это, и не уверен, что вы можете вложить выражение case внутри max() в mysql.

Для этого необходимо вывести одну строку на уникальную комбинацию имени улицы, номера и почтового индекса, причем статус «Истек» или «Продано» имеет преимущество перед другими значениями. То есть, если есть строка с «Истекшая», она будет выводиться с предпочтением не истекшим и не проданным, а строка с «Продано» будет выводиться, если она существует, независимо от того, какие другие строки существуют для этого свойства. Заявление о случаях просто преобразует коды состояния во что-то упорядоченное.

select 
    C_StreetName, 
    C_StreetNumber, 
    C_PostalCode, 
    max(
     case status 
      when 'Expired' then 1 
      when 'Sold' then 2 
      else 0 
     end) as status 
    group by 
     C_StreetName, 
     C_StreetNumber, 
     C_PostalCode;