Php 如果第一次搜索未返回结果,请在SQL中对另一列再次搜索
我正在数据库上做一个简单的搜索,并将结果返回到一个PHP文件以显示在屏幕上。 我正在使用下面的代码Php 如果第一次搜索未返回结果,请在SQL中对另一列再次搜索,php,mysql,pdo,Php,Mysql,Pdo,我正在数据库上做一个简单的搜索,并将结果返回到一个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 =&
// 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语句
如果($stmt->rowCount()=0){…等
如果我删除该语句,搜索工作正常。它会得到结果,我可以在屏幕上显示它们。但如果第一个查询返回空,我想进行第二次搜索,以检查搜索字符串是否在另一列(AMKA_anchor_成员)上找到。当我尝试这样做时,整个搜索都不起作用。我需要这样做来显示一条特殊消息,如“未找到用户。正在搜索直系亲属”,然后显示第二次查询的结果
您将看到我尝试使用或进行查询,但这并没有生成我想要的消息。只是结果,但无法判断它们是否是在第二次尝试时生成的
我坚持这样做。有什么想法吗?我采取了不同的方法,决定在数据库中完成整个过程,并实际返回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语句中的双等号。我应该注意到这一点,但谢谢你指出。另外……当然我应该使用内部连接……我只需要轻轻一推就可以考虑了。
$stmt->rowCount()=0
应该是$stmt->rowCount()==0
。您正在尝试分配,而不是比较。为什么不使用一个查询,使用左连接?我做了一个查询,检查如下:SELECT*FROMusers
WHEREname
like?或AMKA\u anchor\u MEMBER
like?但我想找到一种方法,在第二列匹配时获取消息。您是bo吗右连接和左连接实际上给了我一个不同方法的想法。谢谢。我将在下面发布我的答案。