Php MySQL查询首先返回大多数匹配项
我正在处理一个查询,它应该通过搜索的关键字返回大多数匹配项的数组或标题。甚至不确定查询是否是它应该是的,但它可以工作。别担心打针,我以后再做。这里的目标是返回结果最多的行的标题Php MySQL查询首先返回大多数匹配项,php,mysql,Php,Mysql,我正在处理一个查询,它应该通过搜索的关键字返回大多数匹配项的数组或标题。甚至不确定查询是否是它应该是的,但它可以工作。别担心打针,我以后再做。这里的目标是返回结果最多的行的标题 $query = "SELECT * "; $query .= "FROM user_rec "; $query .= "WHERE sast1 = '" . $mekletie[0] . "'"; $query .= "OR sast1 = '" . $mekletie[1] . "'";
$query = "SELECT * ";
$query .= "FROM user_rec ";
$query .= "WHERE sast1 = '" . $mekletie[0] . "'";
$query .= "OR sast1 = '" . $mekletie[1] . "'";
$query .= "OR sast1 = '" . $mekletie[2] . "'";
/*NOTE - the query isn't complete yet, it will run sast2 next and so on until sast5
and compare all the same searched keywords */
$result = mysqli_query($connection, $query);
if (!$result) {
die ("DB query nedarbojas");
}
您似乎想这样做:
$query =
"SELECT *
FROM
(SELECT
u.*,
( sast1 = '" . $mekletie[0] . "' +
sast1 = '" . $mekletie[1] . "' +
sast1 = '" . $mekletie[2] . "' +
sast2 = '" . $mekletie[0] . "' +
sast2 = '" . $mekletie[1] . "' +
sast2 = '" . $mekletie[2] . "' ) AS numberofmatches
FROM user_rec ) m
WHERE
m.numberofmatches > 0
ORDER BY
m.numberofmatches DESC";
但是它不起作用,因为如果sast1
匹配$mekletie[0]
,那么它就不会匹配$mekletie[1]
,除非它们是相同的,但从一开始就不是很有用
[编辑]
我看到你的评论,说还有一个stat2。在这种情况下,您可以使用这种方法。但是,如果您为用户存储关键字,您可能需要考虑具有关键字的单独表,您可以这样加入:
$query =
"SELECT
u.*
FROM
user_rec u
-- Inner join implicitly excludes users that don't have any matching tag.
INNER JOIN user_tag t ON t.userid = u.userid
WHERE
t.tag IN ('" .$mekletie[0] . "', '" . $mekletie[1] . "', '" . $mekletie[2] . "')
GROUP BY
-- Mysql, unlike other databases, allows you to specify only the id
-- in group by when actually returning other fields as well.
u.userid
ORDER BY
-- You can return the count, or use it just for sorting.
COUNT(t.userid) DESC"
目前还不清楚问题出在哪里,也不清楚您试图实现什么。如果$mekletie中的任何一个匹配sast1,我们将跳转到SAST2并继续查询