#php #mysql #sql
Всем привет. Предположим есть таблица: | id | item | ------------- | 1 | egg | Довольно не большая, но для примера сойдет. Есть вторая таблица: | id | item_id | shape | corners | ---------------------------------- | 1 | 1 | round | 0 | | 2 | 1 | cube | 4 | Буду краток - вопрос: Как получить следующую таблицу? | id | item | round | cube | ---------------------------- | 1 | egg | 0 | 4 | З.Ы. Соединение идет по id <-> item_id
Ответы
Ответ 1
Как говорит @BOPOH можно использовать JOIN, но единствено верным будет использование GROUP_CONCAT: SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(t2.shape = ''', shape, ''', t2.corners, NULL)) AS ', shape)) INTO @pivot_sql FROM table2; SET @pivot_sql = CONCAT('SELECT t1.id, t1.item, ', @pivot_sql, ' FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.id = t2.item_id GROUP BY t1.id, t1.item'); PREPARE stmt FROM @pivot_sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; UPDATE Как отметили в комментариях, лучше собирать необходимый запрос на клиенте.Ответ 2
можно конечно так SELECT a1.id, a1.item, (SELECT corners from table2 where item_id = a1.id limit 0, 1) as round, (SELECT corners from table2 where item_id = a1.id limit 1, 1) as cube from( SELECT id, item from table1 ) as a1 Так будет отображено, но вообщето зачем оно вам нужно? не лучше ли выбирать данные так как они есть и просто при отображении манипулировать ими? (т.е выбрали данные с помощью JOIN а когда обрабатываете заносите в массив и все...у вас данные готовые к работе) На клиенте тоже можно манипулирвоать данными, как писали выше, но тут какбы вопрос (зачем выбирать данные из базы которые не нужны?), если у вас данные на клиенте часто нужно будет отображаться то одни то другие динамически, то чтобы не делать выборки из базы туда сюда...может и имеет смысл выбирать кучу и уже на клиенте ее отобажать , если задача такого не предусматривает то я бы не стал на клиенте это делать.
Комментариев нет:
Отправить комментарий