将 WHERE 子句与 LIKE 和 OR 一起使用

Using WHERE clause with LIKE and OR

我的搜索功能有这个 sql 语句。

$a_search = "$a%";
$sql = "SELECT a.*, u.*
        FROM articles AS a
        LEFT JOIN users AS u
        ON a.written_by = u.username
        WHERE a.written_by OR a.title LIKE ? // want to search for both
        ORDER BY a.written_by ASC";
$stmt = $conn->prepare($sql);
    $stmt->bind_param("s",$a_search);
    $stmt->execute();
    $result = $stmt->get_result();
// more code ...

除一件事外工作正常。它仅搜索 a.title 匹配的文章。但我也想按作者搜索,所以我加了a.written_by。但是它仍然只搜索 a.title。所以我的问题是如何同时搜索 both

你不能给出一个共同的或和....必须在每种情况下提及...例如

$a_search = "$a%";
$sql = "SELECT a.*, u.*
        FROM articles AS a
        LEFT JOIN users AS u
        ON a.written_by = u.username
        WHERE a.written_by ='cat' OR a.title LIKE 'dog' ? // want to search 
        ORDER BY a.written_by ASC";
$stmt = $conn->prepare($sql);
    $stmt->bind_param("s",$a_search);
    $stmt->execute();
    $result = $stmt->get_result();
// more code ..

你写的内容没有条件 a.written_by 你必须做类似

的事情
$a_search = "$a%";
$sql = "SELECT a.*, u.*
        FROM articles AS a
        LEFT JOIN users AS u
        ON a.written_by = u.username
        WHERE a.written_by LIKE ? OR a.title LIKE ? // want to search for both
        ORDER BY a.written_by ASC";
$stmt = $conn->prepare($sql);
    $stmt->bind_param($a_search,$a_search);
    $stmt->execute();
    $result = $stmt->get_result();
// more code ...

这将发送结果 其中 a.written_by LIKE $a_search 或 a.title LIKE $a_search