За последние 24 часа нас посетили 17982 программиста и 1649 роботов. Сейчас ищут 1667 программистов ...

как вытянуть столбец с определенными строками из таблицы

Тема в разделе "MySQL", создана пользователем AlexsaiL, 20 фев 2017.

  1. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    У ID_PRODUCT несколько изображений в столбце PICTURE_BIG, соответственно занимает несколько строк в таблице(у которых идет один ID_PRODUCT), мне необходимо вытянуть только первое изображение в столбце PICTURE_BIG каждого ID_PRODUCT чтобы перенести в другую таблицу.
     

    Вложения:

    • Без.jpg
      Без.jpg
      Размер файла:
      246,3 КБ
      Просмотров:
      9
  2. Drema

    Drema Новичок

    С нами с:
    20 фев 2017
    Сообщения:
    117
    Симпатии:
    30
    PHP:
    1. SELECT PICTURE_BIG
    2. FROM table
    3. WHERE ID_PRODUCT = 5
    4. ORDER BY id
    5. LIMIT 1
     
    #2 Drema, 21 фев 2017
    Последнее редактирование модератором: 21 фев 2017
  3. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    мне по хорошему надо переделать таблицу изображений с товарами, создать таблицу с изображениями для основного вида карточки товара, и другую таблицу для внутреннего отображений остальных фото товара разного ракурса, поэтому ищу инфу как можно вытянуть отдельные фотографии с таблицы БД
     
  4. Drema

    Drema Новичок

    С нами с:
    20 фев 2017
    Сообщения:
    117
    Симпатии:
    30
    По-хорошему вам надо просто в таблицу добавить поле "Главная картинка - flag_main" и у вот таких первых картинок проставить в нем 1 таким запросом:

    Код (Text):
    1. CREATE TEMPORARY TABLE tt
    2. SELECT
    3.   id,
    4.   (SELECT t2.id
    5.    FROM  tablePictures t2
    6.     WHERE t2.ID_PRODUCT = t1.ID_PRODUCT
    7.     ORDER BY t2.id
    8.     LIMIT 1
    9.    ) as id_main
    10. FROM tablePictures;
    11.  
    12.  
    13. UPDATE tablePictures tp, tt tt SET
    14.    flag_main = CASE WHEN tt.id_main = tp.id THEN 1 ELSE 0 END
    15. WHERE tp.id = tt.id
    После этого при добавлении картинок нужно правильно выставлять flag_main либо периодически выполнять этот же запрос. После этого вытаскивать главные картинки станет гораздо проще простым фильтром по полю flag_main.
    PS Скрипт состоит из двух запросов, обычно CMS сплитят его на два. Если нет, выполняйте один за другим внутри одного коннекта/транзакции.
     
  5. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    благодарю, попробую потестить
     
  6. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    извиняюсь, не до конца понял ваш код,
    CREATE TEMPORARY TABLE tt -создаем временную таблицу tt,
    далее выбираем ид SELECT id, а вот в круглых скобках не до конца уловил суть, (Выбрать t2 .id, из tablePictures t2 где t2.ID_PRODUCT = t1.ID_PRODUCT сортируя по t2. id лимит 1 ) задаем столбцу имя id_main из таблицы tablePictures.
    Как мне это применить к своей таблице pictures которая изображена на вложенном изображении? и что является первой таблицей t1.ID_PRODUCT? что то немного запутался)
     
  7. Drema

    Drema Новичок

    С нами с:
    20 фев 2017
    Сообщения:
    117
    Симпатии:
    30
    1. Временная таблица имеет столько строк, сколько исходная и два поля - id исходное и id_main - код строчки основного вложения для текущего товара. Если эти id равны между собой, то значит это первое вложение, если нет - то последующие.
    2. Просто апдейтим исходную таблицу.

    Вам нужно:
    1. Поменять в запросе название tablePictures на ваше pictures.
    2. Добавить в таблицу поле flag_main int unsigned и заоодно добавить индекс ID_PRODUCT+flag_main
    3. Выполнить сей запрос.
    4. Получать главные вложения путем SELECT * FROM pictures WHERE flag_main = 1 AND ID_PRODUCT IN (....)