我用DB类使用query
方法绑定在一个字符串值解决一起使用时,从只有一个表取出数据。大致看起来像这样:
public function query($sql,$params = array()) {
...
$x = 0;
foreach($params as $param) {
$this->_query->bindValue($x, $param)
$x++;
}
...
//Fetch Results....
}
首先我使用这个字符串传递给query
方法;
SELECT * FROM user_info u JOIN users us ON u.user_id = us.user_id
WHERE u.branch IN (?) AND us.status IN (?) AND us.email_activation IN (?)
ORDER BY ? ? LIMIT ?,?
然后我切换到跟随字符串
SELECT * FROM user_info u JOIN users us ON u.user_id = us.user_id
WHERE u.branch IN (?) AND us.status IN (?) AND us.email_activation IN (?)
ORDER BY u.user_id ASC LIMIT 0,5
然后以某种方式工作。可能它(query
方法)试图将值绑定为字符串或不适用于LIMIT
子句的其他类型。
问题
我试图实现哪些用户可以使用一堆条件以缩小结果的搜索功能。我有两个不同的表(用户,user_info)在我的数据库中。他们有一个共同的名字是'user_id'。 在users
表中存储了用户的状态(例如,电子邮件是否有效,管理员是否接受注册等)。在user_info
表中存储了用户的个人信息。
USER_INFO表
用户表
为了减少我收集过滤器的应用长话短说,并创建一个查询字符串象下面这样:
SELECT u.*, us.*
FROM user_info u
LEFT JOIN users us ON u.user_id = us.user_id
WHERE u.branch IN (?) AND u.state IN (?) AND u.city IN (?)
AND us.status IN (?) AND us.email_activation IN (?)
ORDER BY ? ?
LIMIT ?,?
使用上述查询结果仅返回users
中满足users
列(email_activation和status)条件的行。无论我为'user_info'列指定什么条件。
但是,如果我重新排列像下面的一个字符串(删除LIMIT
),我得到我想要的。两个表的条件都满足了。
SELECT u.*, us.*
FROM user_info u
LEFT JOIN users us ON u.user_id = us.user_id
WHERE u.branch IN (?) AND u.state IN (?) AND u.city IN (?)
AND us.status IN (?) AND us.email_activation IN (?)
ORDER BY ? ?
结果,
**Without LIMIT**
[id] => 15
[user_id] => 11
[branch] => 4
[date_of_birth] => ..
[location] => ..
[city] => ..
[state] => ..
[weight] => ..
[height] => ..
[bio] => ..
...
[name] => ..
[lastname] => ..
[mail] => ..
[password] => ..
[salt] => ..
[joined] => ..
[authority] => ..
[status] => 1
[email_activation] => 1
**With LIMIT (no column from the user_info table)**
[user_id] => 11
[name] =>
[lastname] =>
[mail] =>
[password] =>
[salt] =>
[joined] =>
[authority] => 1
[status] => 1
[activation_code] =>
[email_activation] => 1
编辑: 不限制的结果,我通常会得到2行。 对于LIMIT
子句我使用的值: OFFSET 0,LIMIT 1 ---> LIMIT 0,1
表样品和结果样品加入
DB类使用该行的代码以结合值 $ this - > _ query-> bindValue($ x,$ param);
与实际值的查询看起来像这样
SELECT u.*, us.*
FROM user_info u
LEFT JOIN users us ON u.user_id = us.user_id
WHERE u.branch IN (4) AND u.state IN (1) AND u.city IN (1)
AND us.status IN (1) AND us.email_activation IN (1)
ORDER BY user_id ASC
有多少限制..?可能是您的排序结果的结果是减去查看其他结果的限制.. ... limit只定义您返回的行数选择对筛选器没有影响.. – scaisEdge
请参阅http://meta.stackoverflow。 com/questions/333952/why-should-i-provide-an-mcve-for-what-seem-to-what-seem-a-very-simple-sql-query – Strawberry
@scaisEdge如果我省略了LIMIT '我得到2个结果。因此,我使用LIMIT 1,0 – Zeki