2017-02-09 3 views
0

При создании сводной таблицы с динамическими датами. Я сталкиваюсь с логической стеной, когда речь идет о вставке строки, сгенерированной из моего первого запроса mysql во второй.Передача переменной php в виде строки в mysql как часть SELECT

когда я

echo $rowstring 

эхо генерирует

SUM(IF(`InvDate`='20160106', round(InvTotalIncl,2), 0)) AS `20160106`, 
SUM(IF(`InvDate`='20160107', round(InvTotalIncl,2), 0)) AS `20160107` 

Тестирование выхода через следующий запрос:

select InvOperCode, 
    SUM(IF(`InvDate`='20160106', round(InvTotalIncl,2), 0) ) 
    AS `20160106`, 
    SUM(IF(`InvDate`='20160107', round(InvTotalIncl,2), 0)) 
    AS `20160107` 
    FROM `invoice_hdr_tbl` 
    where InvDate between '20160101' and '20160131' 
    group by InvOperCode 

Я получаю желаемый результат.

Однако, когда я пытаюсь передать первый запрос в виде строки для второго запроса через

$result = mysql_query("select InvOperCode,'.$rowstring.' 
FROM `invoice_hdr_tbl` 
where InvDate between '20160101' and '20160131' 
group by InvOperCode"); 

Я получаю сообщение об ошибке «Запрос, чтобы показать поля из таблицы не удалось» Какая моя строка кода, так что я знаю есть ошибка с моим вторым запросом db.

if (!$result) { 
    die("Query to show fields from table failed"); 

Я думаю, что я не получаю преобразование строки правильно и или цитирование переменной в «выбрать» часть моего запроса.

Любая помощь будет оценена по достоинству.

PS Я оставил

echo $rowstring; 

в своем коде, чтобы определить точку, в которой я Просмотр запроса и о том, эхо, как правильно. По какой-то причине он тогда не соответствует правильному запросу моего db

Вот мой код.

$resultlength = mysql_query("SET SESSION group_concat_max_len = 1000000"); 


$concatresult = mysql_query(" 
select group_concat(distinct CONCAT('SUM(IF(`InvDate`=\'',`InvDate`,'\', round(InvTotalIncl,2), 0)) AS `',`InvDate`,'`')) 
as Data 
FROM `invoice_hdr_tbl` 
where InvDate between '20160101' and '20160131' 
order by InvDate"); 
if (!$concatresult) { 
    die("Query to show fields from table failed"); 
} 

$rowarray = mysql_fetch_assoc($concatresult); 

$rowstring = $rowarray['Data']; 
echo $rowstring; 


$result = mysql_query("select InvOperCode,'.$rowstring.' 
FROM `invoice_hdr_tbl` 
where InvDate between '20160101' and '20160131' 
group by InvOperCode"); 

if (!$result) { 
    die("Query to show fields from table failed"); 
} 
$fields_num = mysql_num_fields($result); 

echo "<h1>Sales Report </h1>"; 
echo "<table border='1'><tr>"; 
// printing table headers 
for($i=0; $i<$fields_num; $i++) 
{ 
    $field = mysql_fetch_field($result); 
    echo "<td>{$field->name}</td>"; 
} 
echo "</tr>\n"; 
while($row = mysql_fetch_row($result)) 
{ 
    echo "<tr>"; 


    foreach($row as $cell) 
     echo "<td>$cell</td>"; 

    echo "</tr>\n"; 
} 
mysql_free_result($result); 

ответ

0

Я нашел решение, это было просто и упускать из виду:

$result = mysql_query("select InvOperCode,'.$rowstring.' 
FROM `invoice_hdr_tbl` 
where InvDate between '20160101' and '20160131' 
group by InvOperCode"); 

должен быть

$result = mysql_query("select InvOperCode,$rowstring 
    FROM `invoice_hdr_tbl` 
    where InvDate between '20160101' and '20160131' 
    group by InvOperCode"); 

 Смежные вопросы

  • Нет связанных вопросов^_^