Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询首先返回大多数匹配项_Php_Mysql - Fatal编程技术网

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并继续查询