MYSQL联合PHP选择一个结果列

时间:2014-05-21 01:57:45

标签: php mysql

好的,当Googling让你睁大眼睛时,盯着SQL是唯一的选择。我无法理解这一点。我尝试做的只是使用1个查询一次搜索多个表并返回它找到的内容。我想我需要对此进行单独的查询,但想看看是否有更好的方法。

因此,例如,有一个类别表和一个用户表。如果用户搜索&#34; jo&#34;,它可能会找到&#34; jobs&#34;在类别表中,但它也应该找到&#34; joe&#34;在users表中。它们以<ul><li> html样式显示,长度固定。有一种方法可以使用一个查询吗?理想情况下,如果&#34;工作&#34;在类别表中找到,它将结束记录,下一条记录将包含&#34; joe&#34;来自用户表(假设&#34; jo&#34;没有来自类别表的多个类别。

我和UNION SELECT一起玩过,但我不确定它是否能以这种方式表现。我可能能够从查询中获得结果,但由于表中有多个正在搜索的字段名称,我需要能够根据它的位置返回结果。

例如:

SELECT cat_name as result FROM categories WHERE cat_name LIKE '%$name%' 
UNION (SELECT firstname as result, lastname as result, username as result WHERE 
firstname LIKE '%$name%' OR lastname LIKE '%$name%' OR username LIKE '%$name%' LIMIT 10

<?php echo $row['result']; ?>

您认为它需要多次查询吗?

1 个答案:

答案 0 :(得分:1)

我没有发现使用多个查询并使用echo分别显示结果以免混淆(因此您知道结果来自哪里)会有任何损害。

这样的事情无论如何都不会给你的剧本造成负担,并且更容易阅读。

<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "SELECT cat_name FROM categories WHERE cat_name LIKE '%$name%';";
$result = mysqli_query($con,$sql);

echo "<h1>Category Matches</h1>"
echo "<ul>";
while($row = mysqli_fetch_array($result)) {
  echo "<li>" . $row['cat_name'] . "</li>";
}
echo "</ul>";

$sql2 = "SELECT * FROM users WHERE first_name LIKE '%$name%';";
$result2 = mysqli_query($con,$sql);

echo "<h1>User Matches</h1>"
echo "<ul>";
while($row = mysqli_fetch_array($result2)) {
  echo "<li>" . $row['first_name'] . "</li>";
}
echo "</ul>";

mysqli_close($con);
?>