如果第一次搜索 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 语句中的双等号。应该注意到这一点,但感谢您指出。另外...当然我应该使用内部连接...我只是需要一个微调来考虑它。
我正在对数据库进行简单搜索,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 语句中的双等号。应该注意到这一点,但感谢您指出。另外...当然我应该使用内部连接...我只是需要一个微调来考虑它。