我目前正在做一个需要MySql数据库的项目,我很难构建我想要得到的查询。
我想从我的mysql查询的特定WHERE条件中获得前10行。
例如My where is date='December';
我想要过去10个月的结果。
Feb、march、april、may、june、july、aug、sept、oct、nov等。
另一个例子是。如果我有17个字符串存储在我的数据库中。在我的where子句中,我指定where strings='eyt' limit 3
Test
one
twi
thre
for
payb
six
seven
eyt
nayn
ten
eleven
twelve
tertin
fortin
fiftin
sixtin
结果必须是
payb
six
seven
提前感谢您的建议或解答
如果你使用的是PDO,这是正确的语法:
$objStmt = $objDatabase->prepare('SELECT * FROM calendar ORDER BY id DESC LIMIT 10');
您可以将ASC
更改为DESC
,以便获得第一个或最后一个10。
解决方案:
select t.*
from mytable t
inner join (select id from mytable where strings = 'eyt' order by id limit 1) x
on t.id < x.id
order by t.id desc
limit 3
演示:http://sqlfiddle.com/# !9/7ffc4/2
它按降序输出行,但您可以使用这种方式,或者将该查询放在子查询中并颠倒顺序。
你的评论:
上面查询中的 x
称为"关联名称",因此我们可以将子查询的列当作表的列来引用。当您将子查询用作表时需要它。
我随意选择了字母x
。您可以使用任何您喜欢的名称作为关联名称,遵循与任何标识符相同的规则。
还可以为查询中的任何简单表(如上面的mytable t
)定义关联名,这样就可以使用方便的缩写名引用该表的列。例如在t.id < x.id
有些人使用术语"表别名",但专业术语是"关联名称"。