2013-09-01 88 views
0

两个态我有以下结构和数据的数据库表的SELECT:如何使用OR子句

| username | content     | date    | 
    elgrand hello      2013-08-08 17:04:07 
    alphard hey,how are you elgrand? 2013-08-08 17:50:22 
    elyson  I don't have any idea  2013-08-08 18:14:31 

是否有可能选择所有的行,其中的用户名是“君爵” + ALL行那里的内容是包含单词'elgrand' ,结果将按日期排序为DESCENDING?

我已经试过这个,但似乎有问题的查询,并没有真正按日期排序,有时结果是双重。

SELECT * FROM ms_writing 
     WHERE username='elgrand' OR content LIKE '%elgrand%' 
     ORDER BY date DESC 
+0

使用'AND'而不是'OR' –

+0

当您从单个表格中进行选择时,结果永远不会翻番。 – Havenard

+0

您写的查询似乎对您发布的示例数据有效。 [这是一个SQLFiddle演示](http://sqlfiddle.com/#!2/d84bcb/1)。也许你可以提供更多关于你有这个问题的细节,或者演示它们的演示? – IMSoP

回答

1

你需要一个AND -

SELECT 
    * 
FROM 
    ms_writing 
WHERE 
    username = 'elgrand' AND 
    content LIKE '%elgrand%' 
ORDER BY 
    date DESC 

这个查询将返回用户名为elgrand,其内容有串elgrand所有行。

+0

这个结果为null,因为这将选择一个用户名是'elgrand'的行,并且它的内容包含单词'elgrand' –

+0

正如我所理解的问题,“AND ALSO”,尽管措辞不佳,意味着OP想要选择包含在内容中包含'elgrand'的'elgrand'名称或行,因此问题中的查询应返回预期结果 – SirDarius

0

请使用AND代替OR

SELECT * FROM ms_writing WHERE username='elgrand' AND content LIKE '%elgrand%' ORDER BY date DESC

结果从来没有翻倍,直到2个记录具有相同的数据

0

你只需要使用AND代替OR。所以,你的查询将是:

SELECT * FROM ms_writing 
     WHERE username='elgrand' AND content LIKE '%elgrand%' 
     ORDER BY date DESC 

另外一两件事,供大家参考,不使用保留字作为数据库字段名,e.g日期,订单等,这可能会造成一种模糊性。