2011-06-20 66 views
2

我有一个返回的结果似乎是一个BLOBmysql-php blob字段?

SELECT CAST(GROUP_CONCAT(CONCAT(value,'(',qty,')') SEPARATOR ', ') AS CHAR)a 
FROM ( 
    SELECT value,count(*) qty 
    FROM extra_field_values 
    WHERE fieldid = @fieldid 
     AND value != '' 
     AND itemid IN (7,8,10,12,15,16,17,18,19,20,21,22,23,24,25,26) 
    GROUP BY value 
) x 
查询

表是

CREATE TABLE `extra_field_values` (
    `itemid` int(11) NOT NULL DEFAULT '0', 
    `fieldid` int(11) NOT NULL DEFAULT '0', 
    `value` text NOT NULL, 
    KEY `itemid` (`itemid`), 
    KEY `fieldid` (`fieldid`), 
    KEY `value` (`value`(1)), 
    KEY `inx` (`itemid`,`fieldid`,`value`(1)) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

主要的想法是,我希望每行返回值的字符串:::计数由###分隔。

问题是,PHP返回空结果。就驾驶员而言,我已经尝试了mysql和mysqli。 任何想法?

PHP

$result = $mysqli->query(" SELECT CAST(GROUP_CONCAT(CONCAT(value,'(',qty,')') SEPARATOR ', ') AS CHAR)a 
FROM ( 
    SELECT value,count(*) qty 
    FROM extra_field_values 
    WHERE fieldid = @fieldid 
     AND value != '' 
     AND itemid IN (7,8,10,12,15,16,17,18,19,20,21,22,23,24,25,26) 
    GROUP BY value 
) x ") ; 
    while($row = $result->fetch_assoc()){ 
     print_r($row); 
    } 

即使你通过phpmyadmin执行它返回null。尝试在EMS上使用它就像一个魅力。

完整的查询

SELECT 
extra_field_values.fieldid, 
extra_fields.var_name, 
extra_fields.field, 
extra_fields.type, 
@fieldid:=extra_field_values.fieldid, 
( 
SELECT CAST(GROUP_CONCAT(CONCAT(value,'(',qty,')') SEPARATOR ', ') AS CHAR) a 
FROM (SELECT value, @fieldid, count(*) qty FROM extra_field_values WHERE fieldid = @fieldid GROUP BY value) x 
) as v, 
count(itemid) as total, 
(SELECT groupid FROM extra_fields_groups_items WHERE itemid = @fieldid) as groupid 
FROM extra_field_values INNER JOIN extra_fields 
    ON (extra_field_values.fieldid=extra_fields.fieldid) 
WHERE module = 'listings' 
AND itemid IN (7,8,10,12,15,16,17,18,19,20,21,22,23,24,25,26) 
AND settings LIKE '%"search";s:1:"1"%' 
GROUP BY fieldid 
+0

请在其他地方定义一些PHP代码 –

回答

1

您要查询的会话变量@fieldid匹配字段,但我猜你没有定义在你的mysqli会议或在您的phpMyAdmin的环境变量。

SET @fieldid := 1234; 
SELECT ... WHERE fieldid = @fieldid ... 

否则,您可以使用?作为查询参数占位符fieldid并将其绑定到一个PHP变量。

http://php.net/manual/en/mysqli-stmt.bind-param.php


请问以下查询你想要做什么,不使用@fieldid会话变量?

SELECT x.fieldid, x.var_name, x.field, x.type, x.groupid, COUNT(*) AS total, 
    CAST(GROUP_CONCAT(CONCAT(x.value,'(',x.qty,')') SEPARATOR ', ') AS CHAR) a 
FROM ( 
    SELECT v.value, v.fieldid, f.var_name, f.field, f.type, g.groupid, COUNT(*) AS qty 
    FROM extra_field_values AS v 
    INNER JOIN extra_fields AS f ON f.fieldid=v.fieldid 
    INNER JOIN extra_fields_groups_item AS g ON g.itemid=v.fieldid 
    WHERE f.module = 'listings' 
    AND f.itemid IN (7,8,10,12,15,16,17,18,19,20,21,22,23,24,25,26) 
    AND f.settings LIKE '%"search";s:1:"1"%' 
    GROUP BY v.value, v.fieldid 
) as x 
GROUP BY x.fieldid 
+0

。我正在显示的查询是一个子查询。完整的查询看起来像SELECT extra_field_values.fieldid,extra_fields.var_name,extra_fields.field,extra_fields.type,@fieldid:= extra_field_values.fieldid,(SELECT CAST(GROUP_CONCAT(CONCAT(..... – mbouclas

+0

)Your comment got truncated。请编辑您的原始问题,并发布完整的SQL查询。 –

+0

yeap,这对我很有用。感谢很多,我花了这么多时间在我的aproach上,我从来没有想过另一个。 – mbouclas