我有三个这样的表:
人员表:
person_id | name | dob
--------------------------------
1 | Naveed | 1988
2 | Ali | 1985
3 | Khan | 1987
4 | Rizwan | 1984
Run Code Online (Sandbox Code Playgroud)
地址表:
address_id | street | city | state | country
----------------------------------------------------
1 | MAJ Road | Karachi | Sindh | Pakistan
2 | ABC Road | Multan | Punjab | Pakistan
3 | XYZ Road | Riyadh | SA | SA
Run Code Online (Sandbox Code Playgroud)
Person_Address表:
person_id | address_id
----------------------
1 | 1
2 | 2 …Run Code Online (Sandbox Code Playgroud) 我使用Zend Framework和Mysql有一个奇怪的问题.我生成了一个查询:
SELECT events.idUser, szForename, szLastname, readers.szName, idZoneFrom, events.dtTime FROM events, users, readers WHERE events.idUser = users.idUser AND events.idReader = readers.idReader AND dtTime >= '2010:02:15 0:00:00' AND dtTime < '2010:02:16 0:00:00' ORDER BY dtTime
Run Code Online (Sandbox Code Playgroud)
如果我在某些控制台(如pma,navicat或shell客户端)中运行它,但是当我尝试使用通过推荐扩展Zend_Db_Table的模型运行它时查询工作正常
$arResult = $this->getDefaultAdapter()->query($szQuery)->fetchAll();
Run Code Online (Sandbox Code Playgroud)
它与1064错误:
enter code here
An error occurred
Application error
Exception information:
Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to …Run Code Online (Sandbox Code Playgroud) 假设我有一个随机的zend_db_select对象.
如何对该对象执行计数,因此我知道满足查询的项目数量.
我尝试了以下方法:
$data->TotalRecords = $select->columns(new Zend_Db_Expr('COUNT(*)'))->query()->fetch();
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误:
消息:没有为FROM子句指定表
查询本身工作正常并返回结果集.
嗨,我想将我正常的mysql查询转换为zend.db.select;
我想使用这个脚本:
$select = $db->select();
// Add a FROM clause
$select->from( ...specify table and columns... )
// Add a WHERE clause
$select->where( ...specify search criteria... )
// Add an ORDER BY clause
$select->order( ...specify sorting criteria... );
$select->limit(20, 10);
Run Code Online (Sandbox Code Playgroud)
我的查询如下
SELECT
IF(derived_messages.toid = '$user', derived_messages.fromid,
derived_messages.toid) friend1,c.UserName,
derived_messages.message, derived_messages.fromid, derived_messages.toid,
derived_messages.is_read,derived_messages.type,derived_messages.id as mesid,
derived_messages.date,
(SELECT M.message_id FROM messagesmapped M where M.message_id= derived_messages.id AND M.user_id ='$user' AND M.important = 1) as MesMapid
FROM
(
SELECT *
FROM messages
WHERE messages.deleted_by NOT …Run Code Online (Sandbox Code Playgroud) 我认为可以使用Zend_Db_Select或Zend_Db_Table_Abstract编写选择查询,但我不明白何时使用两者中的哪一个.
一个比另一个更优化的东西?与其中一个连接"更容易"吗?
谢谢!
我的Web应用程序(PHP/MySQL + Zend)中的SQL查询使用许多参数来构建搜索查询.但是,提取的记录应按两列分组以获得子总计.WITH ROLLUP似乎是查找小计的好方法,但Zend_Db_Select不支持此修饰符.有什么工作吗?
我有一个查询,LEFT JOIN在子选择上执行.此查询在高负载环境中运行,并在设置要求内执行.查询(高度简化)看起来像:
SELECT
table_A.pKey
, table_A.uKey
, table_A.aaa
, table_B.bbb
, alias_C.ccc
, alias_C.ddd
FROM table_A
INNER JOIN table_B ON table_A.pKey = table_B.pKey
LEFT JOIN (
SELECT
table_X.pKey
, table_X.ccc
, table_Y.ddd
FROM table_X
INNER JOIN table_Y ON table_X.pKey = table_Y.pKey
) AS alias_C ON table_A.uKey = alias_C.pKey;
Run Code Online (Sandbox Code Playgroud)
(由于各种原因,不可能将子选择重写为(直接)LEFT JOIN).
现在,我无法LEFT JOIN on subselect与之合作Zend_Db_Select.我已经尝试了我能想到的一切,但它不起作用.
所以我的问题是:
Zend_Db_Select? 有没有办法在查询数据库之前将Zend db Select或Zend DB查询转换为SQL查询?还有其他解决方法吗?
因为我想构建一个Zend DB无法处理的更复杂的SQL查询,而不修改我当前的Zend db代码结构.
如何设置此查询
SELECT city_id FROM cities WHERE city_name LIKE "%Vicenza%"
Run Code Online (Sandbox Code Playgroud)
使用Zend_Db_Select类?
我正在使用以下方法从模型中输出选择菜单的内容:
$select = $this->select();
$select->order('name');
return $this->fetchAll($select);
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是按特定值排序,然后按名称列排序.SQL看起来像这样:
SELECT * FROM `names` ORDER BY `name` = 'SomeValue' DESC,`name`
Run Code Online (Sandbox Code Playgroud)
示例SQL代码:
CREATE TABLE IF NOT EXISTS `names` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
INSERT INTO `names` (`id`, `name`) VALUES
(1, 'rob'),
(2, 'dave'),
(3, 'andy'),
(4, 'paul'),
(5, 'jason'),
(6, 'john');
SELECT *
FROM `names`
ORDER BY `name` = 'john' DESC , `name`
Run Code Online (Sandbox Code Playgroud)
返回值:
6 john
3 andy
2 …Run Code Online (Sandbox Code Playgroud) 你如何(优雅地)使用Zend Framework 2中的闭包来按字段排序select语句?
我有以下PHP代码:
$gateway = new \Zend\Db\TableGateway\TableGateway('table_name', $adapter);
$select = $gateway->select(function($select){
$select->where->in('id', array(4, 2, 3, 1));
// insert some awesome ordering magic here..!
});
Run Code Online (Sandbox Code Playgroud)
我知道你可以很容易地做到这一点:
...
$select->order(array('id ASC'));
...
Run Code Online (Sandbox Code Playgroud)
但是,这只是按升序id值排序结果,我需要通过特定的id序列对它们进行排序(即:按序列排序)4, 2, 3, 1.
是否有一个优雅的Zend Framework 2功能,我可以在这里使用id它们自己订购?有效地创建SQL:
select * from table_name
where 'id' in (4, 2, 3, 1)
order by field('id', (4, 2, 3, 1));
Run Code Online (Sandbox Code Playgroud)