如果第一次搜索 returns 没有结果,请在另一列的 SQL 中再次搜索

Search again in SQL on another column if first search returns no results

我正在对数据库进行简单搜索,return 结果生成 PHP 文件以显示在屏幕上。 我正在使用下面的代码。

// CONNECT TO DATABASE
try {
  $pdo = new PDO(
    "mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME,
    DB_USER, DB_PASSWORD, [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
  );
} catch (Exception $ex) { exit($ex->getMessage()); }

// SEARCH
// $stmt = $pdo->prepare("SELECT * FROM `users` WHERE `name` LIKE ? OR `AMKA_anchor_MEMBER` LIKE ?");
$stmt = $pdo->prepare("SELECT * FROM `teachers` WHERE `AMKA` LIKE ?");
// $stmt->execute(["%".$_POST['search']."%", "%".$_POST['search']."%"]);
$stmt->execute(["%".$_POST['search']."%"]);

//Empty Results? Need to search again for Anchored AMKA.
if ($stmt->rowCount() = 0) {
    $stmt = $pdo->prepare("SELECT * FROM `teachers` WHERE `AMKA_anchor_MEMBER` LIKE ?");
    $stmt->execute(["%".$_POST['search']."%"]);
}

$results = $stmt->fetchAll();
if (isset($_POST['ajax'])) { echo json_encode($results); }

我有一个 if 语句

if ($stmt->rowCount() = 0) { ... etc etc

如果我删除该语句,搜索就可以正常进行。它得到结果,我可以在屏幕上显示它们。但如果第一个查询 return 为空,我想进行第二次搜索,以检查是否在另一列 (AMKA_anchor_MEMBER) 上找到了搜索字符串。当我尝试这样做时,整个搜索都不起作用。我还需要它来显示一条特殊消息,例如“未找到用户。正在搜索直系亲属”,然后显示第二个查询的结果。

您会看到我尝试使用 OR 进行查询,但没有产生我想要的消息。只是结果,但无法判断它们是否是第二次制作的。

我坚持这一点。有什么想法吗?

我采取了不同的方法,并决定在数据库中完成所有操作,实际上是 return 2 列。这是我的解决方案:

// CONNECT TO DATABASE
try {
  $pdo = new PDO(
    "mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME,
    DB_USER, DB_PASSWORD, [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
  );
} catch (Exception $ex) { exit($ex->getMessage()); }

// SEARCH
$stmt = $pdo->prepare("SELECT CONCAT(p.AMKA,', ',p.lastname,', ',p.name,', ',p.sullogos,', ',p.telephone,', ',p.school) AS 'Teacher' 
                        FROM teachers p 
                        WHERE p.AMKA LIKE ? 
                        AND p.AMKA_anchor_MEMBER LIKE ?");
$stmt->execute(["%".$_POST['search']."%", "%".$_POST['search']."%"]);

if ($stmt->rowCount() == 0) {
    $stmt = $pdo->prepare("SELECT CONCAT(p.AMKA,', ',p.lastname,', ',p.name) AS 'Person',
                            CONCAT('Συγγενής πρώτου βαθμού του: ',t.lastname,',',t.name,' με ΑΜΚΑ: ', t.AMKA,' Σχολείο: ',t.school) AS 'Teacher'
                            FROM teachers p
                            INNER JOIN teachers t ON p.AMKA_anchor_MEMBER = t.AMKA
                            WHERE p.AMKA LIKE ?
                            ORDER BY Person");
    $stmt->execute(["%".$_POST['search']."%"]);
}

$results = $stmt->fetchAll();
if (isset($_POST['ajax'])) { echo json_encode($results); }

我真的错过了 if 语句中的双等号。应该注意到这一点,但感谢您指出。另外...当然我应该使用内部连接...我只是需要一个微调来考虑它。