mysql - поле php blob? - PullRequest
       9

mysql - поле php blob?

2 голосов
/ 20 июня 2011

У меня есть запрос, который в результате возвращает то, что выглядит как 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;

Основная идея заключается в том, что мне нужна строка в строкевозвращаемое значение ::: count, разделенное ###.

Проблема в том, что 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, он вернет ноль.Попробуйте на 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

1 Ответ

1 голос
/ 20 июня 2011

Вы запрашиваете поля, соответствующие переменной сеанса @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...