首页 > 解决方案 > 从所有表中选择行的简单方法

问题描述

我想在我的 mysql 数据库中选择一些行,我有 3 个具有相同结构的表,我尝试使用我创建的脚本并且它有效,但似乎我的脚本中需要太多行。

<?php
$check1 = mysqli_query($con, "SELECT * FROM text WHERE keyword='$string'");
$check2 = mysqli_query($con, "SELECT * FROM sticker WHERE keyword='$string'");
$check3 = mysqli_query($con, "SELECT * FROM image WHERE keyword='$string'");
if(mysqli_num_rows($check1) == 0 && mysqli_num_rows($check2) == 0 && mysqli_num_rows($check3) == 0) {
    echo "success";
}
?>

还有另一种方法可以缩短我上面的脚本吗?谢谢你 :)

标签: phpmysqlmysqli

解决方案


如果所有表都具有相同的结构,则可以使用UNION查询一次从所有三个表中返回行:

$check = mysqli_query($con, "SELECT * FROM text WHERE keyword='$string'
                             UNION
                             SELECT * FROM sticker WHERE keyword='$string'
                             UNION
                             SELECT * FROM image WHERE keyword='$string'");

这将为您提供三个现有查询为您提供的等效行集。请注意,无法确定给定行来自哪个表,因此您可能需要添加一个额外的字段来指示,例如

$check = mysqli_query($con, "SELECT *, 'text' AS src FROM text WHERE keyword='$string'
                             UNION
                             SELECT *, 'sticker' AS src FROM sticker WHERE keyword='$string'
                             UNION
                             SELECT *, 'image' AS src FROM image WHERE keyword='$string'");

推荐阅读