Выбор уникальных значений по условию?

Тема в разделе "Базы данных", создана пользователем usergeyv, 2 окт 2020.

Модераторы: latteo
  1. usergeyv

    usergeyv

    Регистр.:
    5 июл 2013
    Сообщения:
    152
    Симпатии:
    22
    Например таблица post:
    id - IN
    title - строка
    xfields - строка
    Код:
    id  title       xfields                                                                       
    
    1  Назв1       god|2020||zhanr-n-filmy|комедия||id-kinopoisk|1111||name|фильм+1
    2  Назв2       god|2020||zhanr-n-filmy|комедия||id-kinopoisk|1111||name|фильм=1
    3  Назв3       god|2020||zhanr-n-filmy|комедия||id-kinopoisk|1112||name|филь+м2
    4  Назв4       god|2020||zhanr-n-filmy|комедия||id-kinopoisk|1113||name|филь=м3
    5  Назв5       god|2020||zhanr-n-filmy|комедия||name|фильм4             
    


    Делаю запрос:
    Код:
    SELECT id FROM post  WHERE xfields LIKE '%id-kinopoisk%'
    Результат:
    id - 1,2,3,4
    Как сделать, чтобы id-kinopoisk|уникальное значения, то есть выбралось без повторов "1111" ?
    Нужно получить результат:
    id - 1 или 2 и 3,4
     
    Последнее редактирование: 3 окт 2020
  2. CAPAXA

    CAPAXA

    Регистр.:
    7 июн 2007
    Сообщения:
    1.084
    Симпатии:
    631
    LIMIT 1
     
  3. usergeyv

    usergeyv

    Регистр.:
    5 июл 2013
    Сообщения:
    152
    Симпатии:
    22
    id - 1 или 2 и 3,4
     
  4. CAPAXA

    CAPAXA

    Регистр.:
    7 июн 2007
    Сообщения:
    1.084
    Симпатии:
    631
    Не до конца понятны критерии. В выборке постоянно будет четыре варианта?
     
  5. usergeyv

    usergeyv

    Регистр.:
    5 июл 2013
    Сообщения:
    152
    Симпатии:
    22
    мне нужно получить все ID чтобы не совпадала в строке значения id-kinopoisk после разделителя |

    Кажется, нашел решения:

    для понимания, запрос c дублями
    Код:
    SELECT p.id, regexp_substr (p.xfields, 'id-kinopoisk[^a-z]*')  AS id_kinopoisk FROM post  p WHERE  p.xfields LIKE '%id-kinopoisk%'
    дает результат
    Код:
    array(2) {
      ["id"]=>
    string(1) "1"
      ["id_kinopoisk"]=>
      string(22) "id-kinopoisk|1111||"
    }
    array(2) {
      ["id"]=>
    string(1) "2"
      ["id_kinopoisk"]=>
      string(22) "id-kinopoisk|1111||"
    }
    array(2) {
      ["id"]=>
    string(1) "3"
      ["id_kinopoisk"]=>
      string(22) "id-kinopoisk|1112||"
    }
    array(2) {
      ["id"]=>
    string(1) "4"
      ["id_kinopoisk"]=>
      string(22) "id-kinopoisk|1113||"
    }
    
    
    Чтобы убрать дубли, делаю запрос
    Код:
    SELECT p.id, regexp_substr (p.xfields, 'id-kinopoisk[^a-z]*')  AS id_kinopoisk FROM post  p WHERE  p.xfields LIKE '%id-kinopoisk%'  GROUP BY id_kinopoisk
    Код:
    array(2) {
      ["id"]=>
    string(1) "1"
      ["id_kinopoisk"]=>
      string(22) "id-kinopoisk|1111||"
    }
    array(2) {
      ["id"]=>
    string(1) "3"
      ["id_kinopoisk"]=>
      string(22) "id-kinopoisk|1112||"
    }
    array(2) {
      ["id"]=>
    string(1) "4"
      ["id_kinopoisk"]=>
      string(22) "id-kinopoisk|1113||"
    }
    
    
    Сейчас играюсь с регуляркой regexp_substr (p.xfields, 'id-kinopoisk[^a-z]*'), не получается получить только, например ["id_kinopoisk"]=>"1111", если кто поможет, буду благодарен
     
    Последнее редактирование: 3 окт 2020
  6. avisonjohn

    avisonjohn Создатель

    Регистр.:
    23 июл 2011
    Сообщения:
    10
    Симпатии:
    0
    use the LIMIT to select them