SQL“LIKE”如果为空则返回所有行

你好我有2个文本框,我想给用户提供选择一个以查找结果的选项。 用户可以搜索id或名称。 我的问题是因为我使用 LIKE%field%</ code>当用户选择搜索id时,name字段保持为空并返回所有表行。 我希望只有当用户在文本框中输入一些值时才能得到结果。 这是我的SQL查询。 我正在使用mysql </ p>

 “SELECT * FROM properties WHERE ID ='$ id'或Name LIKE'%$ name%'”
</ code> </ pre >

谢谢大家</ p>
</ div>

展开原文

原文

Hello I have 2 textboxes and i want to give to the user the option to choose one in order to find results. The user can search through the id or the name. My problem is because i use LIKE%field% when the user chooses to search through the id the name field stays empty and returns all the table rows. I want to have results only if the user enters some value in the textbox. This is my sql query. I'm using mysql

"SELECT * FROM properties WHERE ID='$id' OR Name LIKE '%$name%'"

Thank you all

doulao3905
doulao3905 我的天啊!2014年!参数化您的查询!stackoverflow.com/questions/60174/...
6 年多之前 回复
douzhi1924
douzhi1924 它在PHP中不起作用,我认为你还需要围绕OR条件的()
6 年多之前 回复

2个回答



您可以在单个查询中执行此操作(从查询本身检查值):</ p>

 “SELECT * FROM properties WHERE('$ id'=''OR ID ='$ id')AND('$ name'=''OR Name LIKE'%$ name%')”
</ code> </ pre>

说明:</ strong> </ p>


  1. 第一个条件:</ p>

    仅当</ strong> $ id </ code>不为空时,查询才会选择 ID ='$ id'</ code> 的记录。
    如果 $ id </ code>为空,查询不会用于第二部分 ID ='$ id'</ code> </ p> </ li>

  2. 第二个条件: </ p>

    只有当</ strong> $ name </ code>为</ strong> $ name </ code>时,查询才会使用名称LIKE'%$ name%'</ code> 过滤记录 非空。
    如果 $ name </ code>为空,查询将不会用于 Name LIKE'%$ name%'</ code>。</ p> </ li>
    </ ol>

    NB:</ strong>当您需要检查多个参数时,此技术非常有用,而不是使用一堆 if ... else </ code> s 在php端。</ p>
    </ DIV>

展开原文

原文

You can do this in a single query (values are checked from the query itself):

"SELECT * FROM properties WHERE ('$id'='' OR ID='$id') AND ('$name' ='' OR Name LIKE '%$name%')"

Explanation:

  1. First condition:

    The query will select records with ID='$id' only when $id is not empty. If $id is empty, query will not go for the second part ID='$id'

  2. Second condition:

    The query filters records with Name LIKE '%$name%' only when $name is not empty. If $name is empty, query will not go for Name LIKE '%$name%'.

NB: This technique is extremely useful when you have numerous parameters to check, rather than using a bunch of if...elses at php side.

drox90250557
drox90250557 对于其他条件(名称)也会发生同样的情况。 如果您需要进一步澄清,请告诉我。
6 年多之前 回复
duan4369
duan4369 为了便于理解,where子句将查找这两个条件(id,name)以返回true。 并且('$ id'=''OR ID ='$ id')将在其中一个条件为真时返回true。 '$ id'=''在空字符串时为true,ID ='$ id'将通过过滤结果返回true,而'$ id'=''将返回true(没有过滤)。
6 年多之前 回复
dsa1230000
dsa1230000 请问一个问题,向我解释('$ id'=''OR ID ='$ id')它是如何工作的?
6 年多之前 回复
doutang1992
doutang1992 是的工作!! 奇怪的方式,但它的工作原理
6 年多之前 回复
douzhao7445
douzhao7445 你知道,当我第一次看到这个逻辑时,我感到很惊讶。 它会像魅力一样工作。 相信我! 我曾多次玩过这样的问题。
6 年多之前 回复
dongzhi4239
dongzhi4239 无论是否有效,它都是一个好主意。 将所有这些逻辑直接放入查询中,而不是在适当的地方使用PHP和SQL,只是模糊了你的意图。 保存代码高尔夫。
6 年多之前 回复
dousou2897
dousou2897 当我发表评论时,您将ID和名称条件与OR相关联,因此AND在特定于名称的部分中是合适的。 由于您更改了整体逻辑,因此现在OR在每个部分中都是合适的。
6 年多之前 回复
donglu8779
donglu8779 它应该是=''或。 请参阅我的回答中的解释。
6 年多之前 回复
dty98339
dty98339 几乎是正确的。 它应该是('$ name'!=''AND ...)
6 年多之前 回复



如果用户必须选择要搜索的字段,您可以执行以下操作:</ p>

  if($ _POST ['search'] =='id'){
$ sql =“SELECT * FROM properties WHERE ID ='$ id'”
} else {
$ sql =“SELECT * FROM properties WHERE Name LIKE'%$ name%'“
}
</ code> </ pre>
</ div>

展开原文

原文

If the user has to select which field to search, you can do:

if ($_POST['search'] == 'id') {
    $sql = "SELECT * FROM properties WHERE ID='$id'"
} else {
    $sql = "SELECT * FROM properties WHERE Name LIKE '%$name%'"
}

dongqu5650
dongqu5650 谢谢Barmar
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐