2 回答

TA貢獻1895條經驗 獲得超3個贊
如果所有表都具有相同的結構,則可以使用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'");

TA貢獻1851條經驗 獲得超3個贊
確保在所有3個表的關鍵字列上都有索引,以便避免完全表掃描。在下面使用創建索引。
CREATE INDEX keyword ON text (keyword);
CREATE INDEX keyword ON sticker (keyword);
CREATE INDEX keyword ON image (keyword);
如果您想知道3個表中的任何一個表中是否存在關鍵字,請僅選擇1行。
<?php
$check = mysqli_query($con, "SELECT 1 FROM text WHERE keyword='$string' limit 1
UNION SELECT 1 FROM sticker WHERE keyword='$string' limit 1
UNION SELECT 1 FROM image WHERE keyword='$string' limit 1");
if(mysqli_num_rows($check) == 0 ) {
echo "success";
}
?>
如果要從每個表中選擇一些行,請使用限制。我僅以5為例。
<?php
$check1 = mysqli_query($con, "SELECT * FROM text WHERE keyword='$string' limit 5");
$check2 = mysqli_query($con, "SELECT * FROM sticker WHERE keyword='$string' limit 5");
$check3 = mysqli_query($con, "SELECT * FROM image WHERE keyword='$string' limit 5");
if(mysqli_num_rows($check1) == 0 && mysqli_num_rows($check2) == 0 && mysqli_num_rows($check3) == 0) {
echo "success";
}
?>
- 2 回答
- 0 關注
- 134 瀏覽
添加回答
舉報