2015-09-10 3 views
0

У меня есть следующий отчет MySQL, подготовленный с помощью @jpw. Запрос работает нормально. Вы можете проверить рабочий запрос на SQLFiddle, но я просто не могу преобразовать этот подготовленный оператор в php-код. Мне нужна помощь.Преобразование MySQL Подготовленный оператор в php-код

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'sum(gender = ''', 
     gender, 
     ''' and r.name = ''', 
     r.name, ''') AS "', 
     if(gender='m','Male','Female'), ' ', r.name, '" ' 
    ) 
) INTO @sql 
FROM 
    tbl_user u 
JOIN 
    tbl_religion r ON u.religion = r.id; 

SET @sql = CONCAT(
    'select timestampdiff(year, dob, now()) age, ', @sql, ' 
    from tbl_user u 
    join tbl_religion r on u.religion = r.id 
    group by timestampdiff(year, dob, now());'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

сделать хранимую прок из него – Drew

ответ

0

Самый простой способ я могу думать о том, чтобы использовать [Создать PHP-код] опцию если вы используете PhpMyAdmin.

или Вы можете использовать сервис форматирования Sql, например http://sqlformat.org/ или http://www.dpriver.com/pp/sqlformat.htm. для быстрого форматирования SQL на php или на любом языке. Конечно, могут быть другие лучшие способы достижения этого.

Вот ваш пример отформатирован через sqlformat.org

<?php 
$sql = " "; 
$sql .= "SET @sql = NULL;"; 
$sql2 = " "; 
$sql2 .= " 
"; 
$sql2 .= "SELECT GROUP_CONCAT(DISTINCT CONCAT('sum(gender = ''', gender, ''' and r.name = ''', r.name, ''') AS \"', if(gender='m','Male','Female'), ' ', r.name, '\" ')) INTO @sql "; 
$sql2 .= "FROM tbl_user u "; 
$sql2 .= "JOIN tbl_religion r ON u.religion = r.id;"; 
$sql3 = " "; 
$sql3 .= " 
    "; 
$sql3 .= "SET @sql = CONCAT('select timestampdiff(year, dob, now()) age, ', @sql, ' 
    from tbl_user u 
    join tbl_religion r on u.religion = r.id 
    group by timestampdiff(year, dob, now());');"; 
$sql4 = " "; 
$sql4 .= " 
PREPARE stmt "; 
$sql4 .= "FROM @sql;"; 
$sql5 = " "; 
$sql5 .= " 
EXECUTE stmt;"; 
$sql6 = " "; 
$sql6 .= " 
DEALLOCATE PREPARE stmt;"; 
$sql7 = " "; 
$sql7 .= " 
"; 

echo "$sql$sql2$sql3$sql4$sql5$sql6$sql7"; 

?> 
+0

Спасибо за ур усилий. Но я все еще не могу разобраться. Мне нужен результат в массиве. Могу ли я помочь мне дальше. –

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