好的,我在SO中搜索过它,但是我找不到它.有人能告诉我一个用于处理Microsoft SQL Server数据库的好的开源查询构建器工具吗?
我的查询是doctirne 2.我在用户,私人或公共领域都有一个状态字段.我希望能够运行此查询并显示所有注释status = public和private如果userid =当前登录用户ID(我知道,$ loggerUserVarID)
$q = $this->em->createQueryBuilder()
->select('c')
->from('\Entities\Comments', 'c')
->leftJoin('c.users', 'u')
->where('status = public') ??? display all public comments but private if it belpongs to the logged in user.?
->setParameter(1, $loggerUserVarID)
->getQuery();
Run Code Online (Sandbox Code Playgroud)
此刻,我在获得结果后使用if语句,是否有办法在此查询中执行if语句?
我需要执行此查询:
SELECT * FROM (SELECT * FROM product WHERE car = 'large' ORDER BY onSale DESC) AS product_ordered GROUP BY type
Run Code Online (Sandbox Code Playgroud)
在Symfony2中使用实体管理器.
我的基本查询构建器将是:
$query = $em->getRepository('AutomotiveBundle:Car')
->createQueryBuilder('p')
->where('pr.car = ?1')
->andWhere('pr.status = 1')
->orderBy('pr.onSale', 'DESC')
->setParameter(1, $product->getName())
->groupBy('p.type')
->getQuery();
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在子查询中添加.
我试过单独的查询并加入它像:
->andWhere($query->expr()->in('pr.car = ?1',$query2->getQuery()));
Run Code Online (Sandbox Code Playgroud)
但我得到:
Call to undefined method Doctrine\ORM\Query::expr()
Run Code Online (Sandbox Code Playgroud) 如何进行查询以获取限制为3行的random()行?
我试过但得到错误:
myQueryBuilder.orderBy("random()", true);
Run Code Online (Sandbox Code Playgroud) 我想将null设置为doctrine中的一个字段,这里是句子
$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$query = $qb->update('Model\Example', 'u')->set('u.deletedAt', ':deletedAt')
->where("u.id IN (:ids)")->setParameter('deletedAt', null)
->setParameter('ids', $ids)
->getQuery();
$query->execute();
Run Code Online (Sandbox Code Playgroud)
我认为这段代码应该可以完成这项工作,但是我得到了这个例外
执行'UPDATE example SET deleted_at =?时发生异常?WHERE(id IN(?))AND(example.deleted_at IS NULL)'with params [null,"5,6"]:SQLSTATE [22P02]:无效的文本表示:7错误:la sintaxis de entrada noesválidaparainteger :«5,6»
首先为什么学说添加AND(example.deleted_at IS NULL)我做错了什么?
[Syntax Error] line 0, col 81: Error: Expected Literal, got 'NULL'当我尝试通过查询构建器执行查询时出错
$qb = $this->createQueryBuilder('r')
->select('r')
->where('r.query = :query')
->setParameter('query', $query)
->andWhere('r.lang = NULL')
;
return $qb->getQuery()->getOneOrNullResult();
Run Code Online (Sandbox Code Playgroud)
r.lang 字段定义为:
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="\BW\LocalizationBundle\Entity\Lang")
* @ORM\JoinColumn(name="lang_id", referencedColumnName="id")
*/
private $lang;
Run Code Online (Sandbox Code Playgroud)
请帮忙解决错误
我有一个作者的全名列,并希望将姓氏提取到另一列.我使用以下原始SQL执行此操作:
SELECT name,
SUBSTRING_INDEX(`name`, ' ', -1) AS `surname`
FROM qr.authors;
Run Code Online (Sandbox Code Playgroud)
输出:

在"使用SQL函数"下,Cookbook说:
除了上述函数之外,func()方法还可用于创建任何通用SQL函数,如year,date_format,convert等.
但是如何通过func()方法创建这个SUBSTRING_INDEX函数,以便我可以将它与CakePHP查询构建器一起使用?
我有这样一个DB Schema(来自Google的这个教程) -
所以图中的实际点就像这样 -
我想要的是找到靠近距离排序的给定点(by point_id)点附近的点
点的位置
(x,y)是(point_x,point_y)在DB中
我想用MySQL解决它,因为我的数据库已经在MySQL中了.
找到2点的距离就像这样容易 -
我想根据MySQL的距离进行排序.
为了消除混淆,我想要稍后在圆圈内的点.但现在我只想找到排序点.
所以你可以忽略这些圈子.
我不知道怎么做,有人可以帮忙吗?
所以在我的数据库中我有一个表调用website_tags,包含id, title等等,而且我也有一个表调用websites,具有相似的结构.还有一个名为table的表assigned_tags,它包含标签和网站之间的关系,因此它包含关系id, tag_id and website_id.
我需要的是将这些表与查询联系起来,我需要获取所有标记并计算这些标记的使用次数.因此,例如website_tags包含以下信息:
1: men
2: women
Run Code Online (Sandbox Code Playgroud)
分配的标签包含id:tag_id:website_id
1: 1: 1
2: 1: 2
3: 2: 2
Run Code Online (Sandbox Code Playgroud)
因此,我将在2个网站中使用"男人"标签,并在1中使用"女人"标签.我应该如何构建查询? 现在我有:
DB::table('website_tags')
->join('assigned_tags', 'website_tags.id', '=', 'assigned_tags.tag_id')
->select('website_tags.id as id', 'website_tags.title as title', DB::raw("count(assigned_tags.tag_id) as count"))-
>get();
Run Code Online (Sandbox Code Playgroud)
但这是错误的,此查询只计算assigned_tags中的行.
这是一个搜索功能,可以返回每个成员注册的最近年份.
我让它使用DB :: raw()调用.但无法让它与查询构建器一起使用.
工作守则:
$query = DB::table('membership as m');
$query->join(
DB::raw(
'(SELECT my.*
FROM membership_years my
INNER JOIN (
SELECT member_id,MAX(membership_year) AS max_my
FROM membership_years
GROUP BY member_id
) my2
ON my.member_id = my2.member_id
AND my.membership_year = my2.max_my
) my'
)
,'m.id','=','my.member_id');
Run Code Online (Sandbox Code Playgroud)
我对查询构建器代码的尝试:
$query = DB::table('membership as m');
$query->join('membership_years as my',
function($j1){
$j1->join('membership_years as my2',
function($j2){
$j2->where('my.membership_year','=','MAX(my2.membership_year)')
->on('my.member_id','=','my2.member_id');
}
)->on('m.id','=','my.member_id');
}
);
Run Code Online (Sandbox Code Playgroud)
产生的错误是:
调用未定义的方法Illuminate\Database\Query\JoinClause :: join()
我不确定这是否因为$j2无法再访问join方法了?
原始MySQL查询:
SELECT my.membership_year,m.*
FROM membership AS m
INNER JOIN
( …Run Code Online (Sandbox Code Playgroud) query-builder ×10
doctrine ×3
doctrine-orm ×3
mysql ×3
php ×3
symfony ×3
laravel ×2
algorithm ×1
android ×1
cakephp ×1
cakephp-3.0 ×1
geolocation ×1
join ×1
location ×1
open-source ×1
ormlite ×1
sql-function ×1
sql-server ×1