2016-02-26 55 views
0

我想获得一个计数值成成变量的值与另一个查询使用。使用查询,以确定一个变量(MySQL的)

这是行不通的,它说:

[错误] 1064 - 你在你的SQL语法错误;检查对应于你的MySQL服务器版本的手册正确的语法以线附近使用“WHERE tabid = 4 SELECT COUNT(列名)FROM场” 1

我使用的查询是:

SET @_count = SELECT COUNT(columnname) FROM field WHERE tabid = 4; 
+0

是'field'一列或表?它应该是一张桌子。 – Zach

+0

字段是表 - 即使backticked它不工作 –

+0

为什么不使用你使用任何服务器端语言和读取查询并将其存储在一个变量,例如PHP语言。然后在获得第一个结果后再完成另一个sql查询? – Zach

回答

1

你将需要包装的SQL SELECT查询在括号中。

SET @_count = (SELECT COUNT(columnname) FROM field WHERE tabid = 4); 
+0

那作品,但没有在...之前 - 欢迎马上被接受 –

0
SELECT COUNT(*) into @_count from field WHERE tabid = 4; 

select @_count; 

的结果

0

做到了,这是怎么了:

/** 
    * Query to find and select all the fields with a specific name on any tab id 
    */ 

    -- Prepare the variables for the query 
    SET @_tabid = 4; -- Replace with your tab id 
    SET @_lowerletter = "%%"; -- Replace with your lower case search 
    SET @_upperletter = "%%"; -- Replace with your upper case search 
    SET @_upperlimit = (SELECT COUNT(columnname) FROM field WHERE tabid = @_tabid); 
    SET @_lowerlimit = 0; -- Set your lower limit 
    SET @_query = "SELECT * FROM field 
           WHERE tabid = ? 
           AND (
            (columnname LIKE ? OR columnname LIKE ?) OR 
            (fieldname LIKE ? OR fieldname LIKE ?) OR 
            (fieldlabel LIKE ? OR fieldlabel LIKE ?) 
           ) 
           ORDER BY tabid, fieldid ASC 
           LIMIT ?, ?;"; 
    -- //Prepare 

    -- Prepare and execute query 
    PREPARE stmt FROM @_query; 
      EXECUTE stmt USING 
       @_tabid, 
       @_lowerletter, @_upperletter, -- Upper and lower search terms 
       @_lowerletter, @_upperletter, -- Upper and lower search terms 
       @_lowerletter, @_upperletter, -- Upper and lower search terms 
       @_lowerlimit, @_upperlimit; -- Upper and lower limits 
    DEALLOCATE PREPARE stmt; 
    -- // Execute