如何解决SQL查询:按ntext字段分组
旧的PHP“ mssql”扩展名仅支持最大255个字节的VARCHAR。这是一个已知的限制,这就是Microsoft一直在开发新的PHP扩展以支持现代sql Server版本的原因。
一种解决方法是将该列的存储声明为NVARCHAR,但是从PHP查询该列时,请使用CAST将其转换为NTEXT。然后可以返回完整长度。
另一个选择是将列存储为NTEXT,但仅book_id
通过将计数放入子查询中来存储GROUP BY :
SELECT bk.*, bc.books_sold
FROM books_book bk
INNER JOIN (SELECT bk2.book_id, COUNT(*) books_sold
FROM books_book bk2 INNER JOIN orderdetails_orddetails ord
ON (bk2.id_book = ord.id_book_orddetails)
GROUP BY bk2.book_id) bc
ON (bk.book_id = bc.book_id);
解决方法
我有以下查询,该查询基本上检索出销量最高的5本图书:
select top 5 count(id_book_orddetails) 'books_sold',bk.*
from orderdetails_orddetails ord inner join books_book bk
on ord.id_book_orddetails = bk.id_book
group by id_book,name_book,author_book,desc_book,id_ctg_book,qty_book,image_book,isdeleted
order by 'books_sold' desc
问题是我收到此错误:
除非使用IS NULL或LIKE运算符,否则无法对text,ntext和image数据类型进行比较或排序。
在books_book
表中,该字段desc_book
的类型为ntext
,我确定问题出在那儿。
这是因为在我将desc_book
to更改为之前ntext
,它是类型nvarchar
,并且运行良好。
之所以更改此字段的数据类型,是因为在PHP网站中,以某种方式显示图书说明(一个不同的sp)时,说明被截断为大约200-255个字符,因此我将其更改为ntext
and’解决了我的问题”(即desc_book
最终显示了整个问题)。
所以基本上这些是我的问题:
- 为什么
desc_book
(nvarchar)字段在PHP页面中显示时被截断? - 如何修复SQL查询以适应按
ntext
字段分组?
仅出于记录目的(我认为这不太相关),我使用的是 MS SQL Server 2005
[更新]
这是我更新的(完全正常运行的)语句:
SELECT bk.*,bc.books_sold
FROM books_book bk
INNER JOIN (
SELECT bk2.id_book,COUNT(*) books_sold
FROM books_book bk2
INNER JOIN orderdetails_orddetails ord
ON (bk2.id_book = ord.id_book_orddetails)
GROUP BY bk2.id_book
) bc
ON (bk.id_book = bc.id_book)
ORDER BY books_sold desc;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。