Перейти к содержимому



Как записать несколько значений в одну ячейку

#1 bo4kov
bo4kov
  • Неактивные
  • 26 сообщений
  • Репутация: 0
0

Отправлено 30 Май 2015 - 17:18

Здравствуйте.Не могу сделать так, чтобы вот этот вот под запрос

, (SELECT `title` FROM `shop_author` WHERE `id` IN('1','4')) AS `title_author` 

записывал в ячейку 'title_author' два значения через запятую. (Где 1 и 4 - это id авторов статей. Например 1 - Иванов Серёга, 4 - Петров Антоха). Этих id может быть неограниченное количество.

 

Вот мой весь запрос:

$query = "(SELECT *, (SELECT `title` FROM `shop_author` WHERE `id` IN('1','4')) AS `title_author` 
               FROM `shop_articles` AS `a`
                    WHERE `a`.`id` IN(
                        SELECT `art_id` FROM `shop_art_cat` WHERE `cat_id` = $category))";

Как мне сделать чтобы с помощью одного данного запроса в ячейку 'title_author' поместить имена авторов через запятую (хотя не важно как, главное чтобы два автора были в одной ячейке)???

 

У меня данный запрос помещает только одного первого автора, как исправить?


 

 

Сообщение отредактировал bo4kov: 30 Май 2015 - 17:18

  • 0

#2 miketomlin
miketomlin
  • Пользователь
  • 555 сообщений
  • Репутация: 117

Отправлено 30 Май 2015 - 20:59

GROUP_CONCAT(`title`)?

Не понял, в чем смысл выбирать авторов 1, 4.
  • 0


#3 Ixman
Ixman
  • Пользователь PRO
  • 3 173 сообщений
  • Репутация: 844

Отправлено 31 Май 2015 - 10:34

@bo4kov, только через цикл while 

Хотя сразу в запрос не въехал, по сути у вас два массива, такое вряд ли возможно, тут уже нужно наверное  группировку использовать


  • 0


#4 Slava1988
Slava1988
  • Неактивные
  • 162 сообщений
  • Репутация: 13

Отправлено 01 Июнь 2015 - 12:22

Лучше не городить таких ужасов, сделать связующую таблицу и использовать ее в паре с LEFT JOIN


  • 0

#5 bo4kov
bo4kov
    Topic Starter
  • Неактивные
  • 26 сообщений
  • Репутация: 0

Отправлено 01 Июнь 2015 - 17:25

@miketomlinGROUP_CONCAT(`title`) не работает, выдает ошибку.

 

 

@Ixman, можно по подробнее про группировку? а то я ни когда с ней не сталкивался.


  • 0

#6 Ixman
Ixman
  • Пользователь PRO
  • 3 173 сообщений
  • Репутация: 844

Отправлено 01 Июнь 2015 - 19:43

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


  • 0


#7 fedornabilkin
fedornabilkin
  • Модератор
  • 1 184 сообщений
  • Репутация: 206

Отправлено 01 Июнь 2015 - 20:31

Я обычно в таких случаях добавляю еще одну таблицу и туда пишу.

Например:

shop_articles, id_autor

Потом джойном связываешь данные таблицы статей и данные таблицы авторов


  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



#8 bo4kov
bo4kov
    Topic Starter
  • Неактивные
  • 26 сообщений
  • Репутация: 0

Отправлено 02 Июнь 2015 - 14:37

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


  • 0

#9 Serg44
Serg44
  • Неактивные
  • 25 сообщений
  • Репутация: 0

Отправлено 02 Июнь 2015 - 21:01

Как мне сделать чтобы с помощью одного данного запроса в ячейку 'title_author' поместить имена авторов через запятую (хотя не важно как, главное чтобы два автора были в одной ячейке)???

Ячейка должна иметь тип text в неё можно записать сколько угодно значений, значения надо разделять символом например ":" После выборки из базы значения придётся обработать, с помощью PHP функцией  explode. Лично я использую подобный алгоритм, это лучше чем делать связанные таблицы.


  • 0

#10 fedornabilkin
fedornabilkin
  • Модератор
  • 1 184 сообщений
  • Репутация: 206

Отправлено 03 Июнь 2015 - 09:14

@Serg44, в таком случае проще сериализовать массив, записать в БД и потом ансериализовать.

тогда мне запрос выводит эту статью два раза

Что мешает сделать проверку на дубли? Или я не совсем понял конечную задачу. 


  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



#11 bo4kov
bo4kov
    Topic Starter
  • Неактивные
  • 26 сообщений
  • Репутация: 0

Отправлено 05 Июнь 2015 - 11:30


Ячейка должна иметь тип text в неё можно записать сколько угодно значений, значения надо разделять символом например ":"

 

Но как мне это сделать в одном запросе? Мне что нужно в БД создавать еще одну ячейку 'title_author' в таблице 'shop_articles'? Но если мне нужно будет вытаскивать например и текст описание автора, мне придется еще одну ячейку создавать  в БД ??? что-то это не то

@fedornabilkin, Проверку на дубли сделать не проблема, но тогда id статей перераспределяются, а мне нужно id то, что в БД хранится, для формирование ссылки. 


  • 0

#12 miketomlin
miketomlin
  • Пользователь
  • 555 сообщений
  • Репутация: 117

Отправлено 05 Июнь 2015 - 21:55

Нормально объясните, что у вас есть и что нужно получить. Мой вопрос про 1, 4 так и остался без ответа. "Не работает, выдает ошибку" – тоже не ответ, а то я могу сказать, что у меня работает и не выдает ошибку.


  • 0


#13 fedornabilkin
fedornabilkin
  • Модератор
  • 1 184 сообщений
  • Репутация: 206

Отправлено 05 Июнь 2015 - 23:03

Нормально объясните, что у вас есть и что нужно получить.

Надо элементарно увязать две таблицы с помощью третьей. ТС либо никогда так не делал, либо не это ожидает.

@bo4kov, И до сих пор не могу понять как у статьи два автора?


  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



#14 bo4kov
bo4kov
    Topic Starter
  • Неактивные
  • 26 сообщений
  • Репутация: 0

Отправлено 06 Июнь 2015 - 15:02

В общем объясняю все заново.

 

У меня есть три таблицы: 

1. shop_articles (с полями -  id, title, text, img) - здесь хранятся статьи 

2. shop_author  (с полями -  id, title, text, img - здесь хранятся авторы 

3. shop_art_author (с полями - id, art_id, author_id - звязывающая таблица статей и авторов

 

Задача - мне нужно вытащить имя автора(title), для каждой статьи.

Напоминаю, что авторов у одной статьи может быть много, как 1 так и 100 (количество не известно). 

 

Написал вот такой код:

$query = "SELECT *, (SELECT `title` FROM `shop_author` WHERE `id` IN
(SELECT `author_id` FROM `shop_art_author` WHERE `art_id`=`a`.`id`)) AS `title_author`
FROM `shop_articles` AS `a";
$res = mysql_query($query);
    while($row = mysql_fetch_assoc($res)){
        $products[] = $row;
    }
    return $products; 

В phpmyadmin такой запрос выдает ошибку - Subquery returns more than 1 row(Вложенный запрос возвращает более 1 строки).

 

В принципе возвращает по идее то, что мне и нужно (массив), но как его запихнуть в ячейку `title_author`?  

 

 

@miketomlin, авторы 1 и 4 (id авторов)  - это цифры взятые просто для примера, в место них могут быть абсолютно другие цифры и абсолютно другое количество этих цифр.

 

Насчет GROUP_CONCAT - все таки получил то, что нужно было, с помощью такого запроса:

$query = "SELECT *, (SELECT GROUP_CONCAT(`title`) FROM `shop_author` WHERE `id` IN(SELECT `author_id` FROM `shop_art_author` WHERE `art_id`=`a`.`id`)) AS `title_author`
FROM `shop_articles` AS `a`";

@fedornabilkin,

И до сих пор не могу понять как у статьи два автора?

На самом деле я делаю сайт не со статьями, а с инфопродуктами у которых может быть более одного автора. А статьи я просто привел как пример. 

 

 

ВСЕМ СПАСИБО! ЗАДАЧА РЕШЕНА.


Сообщение отредактировал bo4kov: 06 Июнь 2015 - 15:03

  • 0

robot
robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Похожие темы
  Название темы Автор Статистика Последнее сообщение

Пользователь месяца
Totti Totti 1-й за Январь
Очков активности: 3 937 6 тем, 87 сообщений, 25 баллов репутации
ТОП самых активных за этот месяц
  • Фотография Megoydagi
    #1

    Megoydagi (24ho.ru)
    Очков активности: 787.5 6 тем, 57 сообщений, 7 баллов репутации

  • Фотография NataliaAntalia
    #2

    NataliaAntalia (zdorovemedicina.ru)
    Очков активности: 153 Вне конкурса за определение пользователя месяца

  • Фотография BLIK
    #3

    BLIK
    Очков активности: 126 Вне конкурса за определение пользователя месяца

  • Фотография Totti
    #4

    Totti
    Очков активности: 96 Вне конкурса за определение пользователя месяца

  • Фотография magnet
    #5

    magnet (rbfxdirect.com)
    Очков активности: 55.5 2 темы, 31 сообщение, 1 балл репутации

  • Фотография Владислава Рыкова
    #6

    Владислава Рыкова
    Очков активности: 54 0 тем, 12 сообщений, 3 балла репутации

  • Фотография albedo
    #7

    albedo (online24news.ru)
    Очков активности: 34.5 1 тема, 20 сообщений, 1 балл репутации

  • Фотография TindrumGM
    #8

    TindrumGM (novosti-land.ru)
    Очков активности: 28.5 5 тем, 4 сообщения, 1 балл репутации

  • Фотография MattCutts
    #9

    MattCutts (dmitrylee.ru)
    Очков активности: 24 Вне конкурса за определение пользователя месяца

  • Фотография kolver
    #10

    kolver
    Очков активности: 21 2 темы, 8 сообщений, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 30.01.2020
  • Яндекс выдача: 27.02.2020
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru