2012-04-23 2 views
2

Я работаю со странной схемой базы данных: данные, которые я ищу, хранятся в одном из 30 столбцов: value1, value2, value3 ... value30.Подзапрос с подготовленными операциями на стороне сервера?

Используя запрос, я знаю, какой номер столбца для поиска:

enter image description here

Как я могу использовать этот номер, чтобы сообщить MySQL, чтобы принести мне, для каждого «machine_id», соответствующий «valuex» столбец?

Я читал MySQL concat() to create column names to be used in a query?, следует ли применять эту технику или искать в другом месте?

+0

Было бы лучше исправить схему, чем потворствовать ей, разработав, как с ней справиться. Это будет кошмар, все время. –

+0

Клиент хочет что-то динамическое. Каждая машина может иметь до 30 различных значений, и они могут быть в разных порядках. Так вот что мы придумали: | – Manu

+0

сначала у нас было что-то полностью динамическое, мы могли бы иметь любое количество значений для каждого типа машины. Но импорт данных был слишком медленным. – Manu

ответ

0

Если у вас есть ровно 30 полей (таблица схемы не меняется), то вы можете использовать простой SQL запрос -

SELECT 
    machine_id, 
    SUM(IF(where_is_data = 1, value1, NULL)) AS value1, 
    SUM(IF(where_is_data = 2, value2, NULL)) AS value2, 
    SUM(IF(where_is_data = 3, value3, NULL)) AS value3, 
    ... 
    SUM(IF(where_is_data = 30, value30, NULL)) AS value30 
FROM 
    table 
GROUP BY 
    machine_id; 
+0

Не будет ли создавать 30 "valueX"? Мне все равно нужно было бы узнать, какой из них отображать – Manu

0

Я сделал это с помощью простого CASE:

SELECT 
    inverter.id as inverter_id, 
    SUM(CASE 
     when csvData.value = 1 then data.value1 
     when csvData.value = 2 then data.value2 
     when csvData.value = 3 then data.value3 
     (...) 
     when csvData.value = 30 then data.value30 
    END) 
    as value 

FROM 
    (...) 
Смежные вопросы