2017-06-29 105 views
-1

我有一个表与列名:如何从mysql中选择具有相同列名的多行中的一行?

id 
message 
sender 
chat_id 

我想从与同chat_id,在while循环读取的行数一行。

会是怎样的MySQL查询

+0

任何列目前尚不清楚你想要达到的目标。也许一个例子将有所帮助 –

+0

请参阅[为什么我应该为我认为是非常简单的SQL查询提供一个MCVE](http://meta.stackoverflow.com/questions/333952/why-should-i-provide- an-mcve-for-what-looks-to-how-to-very-simple-sql-query) – Strawberry

回答

0

如果你只想要一个行,这些列的人都需要有独特的数据这样你就可以将其添加到WHERE子句

SELECT id,message,sender,chat_id from information WHERE id=2例如。

SELECT id,message,sender,chat_id from information WHERE chat_id=5 AND sender='mark'

或while循环过程中,匹配任何你从它想要的列和抢。 但是,它必须是数据的唯一组合,否则它将被前面的覆盖。

while($row = $result->fetch_assoc()){ 
    if($row['sender'] == 'mark' && $row['chat_id'] == '5'){ 
    $thisIsMyRow = $row['id']; 
} 
0

请你能解释一下吗?你试图达到什么目标?

说这是你的查询:

​​

您可能有匹配查询200行。为了只返回一个结果,你可以做一些事情。

如果你想要最新消息,你可以这样做:

SELECT id,message,sender,chat_id from messages WHERE chat_id=1 ORDER BY id DESC LIMIT 1

另一个例子,最新的5封邮件

SELECT id,message,sender,chat_id from messages WHERE chat_id=1 ORDER BY id DESC LIMIT 0,5

此外,当你把它回到PHP,而不是通过循环,你可以这样做:

$row = $result->fetch_assoc()

由于我们的查询只返回1行,所以不需要循环。您可以在查询返回多个结果时执行此操作 - 但最好优化查询。

我可以更好地建议您是否可以详细说明。

0
while($row = $result->fetch_assoc()){ 
$query = "SELECT id, message, sender,chat_id FROM messages WHERE Y = X AND Z = $K LIMIT 1"; 
} 

更换WHERE部分与要

+0

请注意,没有ORDER BY的LIMIT是相当无意义的 - 并且以这种方式在循环内执行查询是不好的做法。 – Strawberry

+0

@Strawberry为什么?它仍然会做限制的工作,不是吗? –

相关问题