Выборка уникальных значений, где...

Тема в разделе "Как сделать...", создана пользователем QuZ, 25 янв 2012.

  1. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    74
    Симпатии:
    49
    Доброе время суток. Возник вопрос один. Сам пытался решить - не вышло.
    Имеется у меня база данных состоящяя из 2-х колонок.
    ID|TIPE ( Грубо говоря)
    Были у меня 2-ве базы с одинаковыми ID (Т.е. точная копия), но с разным значением TIPE в нем. Например.
    ID=1|TIPE=1 (Первая таблица)
    ID=1|TIPE=0 (Вторая таблица)
    Я эти обе базы залил без обработки в обну базу.
    Получил на выходе в общей базе:
    ID=1|TIPE=1
    ID=1|TIPE=0
    И т.д.
    Теперь столкнулся с проблемой.
    В начале скрипта идет построчная выборка значений в массив.
    Хотелось бы сделать: если у меня найдена уже строчка с записанным ID, тогда я не произвожу занесение массива а базу, а смотрю на значение $row[TIPE] и на полученное значение из [TIPE], которое было уже внесено(Представим его $row_2[TIPE].)
    Если в $row[TIPE] содержится значение >, чем в $row_2[TIPE], тогда
    $row_2[TIPE] = $row[TIPE]
    else
    $row[TIPE]= '';
    (Писал без синтексиса, как наглядность примера).
    Можно вставить селект по $row[ID] уже в занесенную базу, сделать вторым массивом и т.д, но это очень сильно увелит нагрузку и время выполнения скрипта.
    Хотел бы узнать, есть у кого какие идеи, как это сделать малой кровью.
    Старался описать как можно подробнее, если будут дополнительные вопросы - без проблем отвечу.
    Спасибо.
     
  2. psn

    psn

    Регистр.:
    30 апр 2009
    Сообщения:
    228
    Симпатии:
    30
    предположим что бд называется test... как вы пишете есть 2 поля id и type
    как я понял надо взять максимальное значение для поля type при совпадении id
    будет примерно вот такой запрос:
    select max(test.type) from test group by id

    в результате запроса, у вас будет по одному id с большим type
     
  3. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    74
    Симпатии:
    49
    1) Тогда запрос главный надо переписывать, а на нем сидит еще с 10-ток обработчиков.. Или в отдельную функцию все это выносить.. Не совсем хочется..
    2) Я плохо указал, что ID может быть или +, или пустым..
    Тогда получаю, если оба айди пустые, тогда не что он покажет..
    Или оба плюса будет.
    Или будет + и значение..
    Можно избавить от плюсов простой заменой на значение, например 100...
    Но с пустыми как будут обстоять дела?
    Спасибо за ответ.
     
  4. psn

    psn

    Регистр.:
    30 апр 2009
    Сообщения:
    228
    Симпатии:
    30
    запросы mysql поддерживают и условия IF можете на уровне запроса заменять пустое значение чем угодно, зачем придумывать велосипед, я бы сделал то, что вы хотите на уровне слияния 2-х бд, ничего переписывать не придется тогда, как я понимаю...

    синтаксис как-то так if(isnull())