2011-06-20 16 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の両方を試してみました。 アイデアあなたはそれがnullを返しphpMyAdminにを通してそれを実行している場合でも

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); 
    } 

。 EMSで試してみてください。mysqlは魅力的です。

フルクエリ

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 ... 

さもないと、あなたは、フィールド識別子のためのクエリパラメータのプレースホルダとして?を使用して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

あなたのコメントは切り捨てられました。あなたのオリジナルの質問を編集して、完全なSQLクエリを投稿してください。 –

+0

うん、それは私のためにうまくいきます。 – mbouclas

関連する問題