Php 具有多个AS语句的sql联合复制问题

Php 具有多个AS语句的sql联合复制问题,php,sql,union,Php,Sql,Union,使用以下sql查询: SELECT id, title, description, publisher, city, state, date, MATCH (title, description, publisher) AGAINST ('pizza+view' IN BOOLEAN MODE) AS score FROM job HAVING score > 0.01 UNION SELECT id, title, de

使用以下sql查询:

  SELECT id, title, description, publisher,
         city, state, date,
         MATCH (title, description, publisher) AGAINST ('pizza+view' IN BOOLEAN MODE) AS score 
    FROM job 
  HAVING score > 0.01 
  UNION 
  SELECT id, title, description, publisher,
         city, state, date, ( 3959 * acos( cos( radians('37') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('-122') ) + sin( radians('37') ) * sin( radians( latitude ) ) ) ) AS distance
    FROM job
  HAVING distance < '175'
ORDER BY distance DESC
   LIMIT 0, 30
分数将作为距离返回,因此没有唯一的行


如何更改此设置?

尝试在第一条语句中使用CTE。 大概是这样的:

WITH score as (  SELECT id, title, description, publisher, 
     city, state, date, 
     MATCH (title, description, publisher) AGAINST ('pizza+view' IN BOOLEAN MODE) AS score  
FROM job  
HAVING score > 0.01 )

SELECT j.id, j.title, j.description, j.publisher, 
     j.city, j.state, j.date, ( 3959 * acos( cos( radians('37') ) * cos( radians( latitude ) )   
     *        cos( radians( longitude ) - radians('-122') ) + sin( radians('37') ) * sin(   
radians  ( latitude ) ) ) ) AS distance, s.score
FROM job j
LEFT OUTER JOIN score s ON s.ID = j.ID
HAVING j.distance < '175' 
ORDER BY distance DESC 
LIMIT 0, 30 

尝试在第一条语句中使用CTE。 大概是这样的:

WITH score as (  SELECT id, title, description, publisher, 
     city, state, date, 
     MATCH (title, description, publisher) AGAINST ('pizza+view' IN BOOLEAN MODE) AS score  
FROM job  
HAVING score > 0.01 )

SELECT j.id, j.title, j.description, j.publisher, 
     j.city, j.state, j.date, ( 3959 * acos( cos( radians('37') ) * cos( radians( latitude ) )   
     *        cos( radians( longitude ) - radians('-122') ) + sin( radians('37') ) * sin(   
radians  ( latitude ) ) ) ) AS distance, s.score
FROM job j
LEFT OUTER JOIN score s ON s.ID = j.ID
HAVING j.distance < '175' 
ORDER BY distance DESC 
LIMIT 0, 30 

我将使用子查询并按分数和距离字段对结果排序,这样分数相同的行将按距离排序。我已经从最终结果集中删除了分数列,我不确定在这种情况下您是否需要它

select id, title, description, publisher, city, state, date from (
    SELECT 
        id, title, description, publisher, city, state, date,
        MATCH (title, description, publisher) AGAINST ('pizza+view' IN BOOLEAN MODE) AS score,
        (3959 * acos( cos( radians('37') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('-122') ) + sin( radians('37') ) * sin( radians( latitude ) ) ) ) AS distance
    FROM job 
) t
where score > 0.01 or distance < 175
order by score desc, distance desc
limit 0, 30

我将使用子查询并按分数和距离字段对结果排序,这样分数相同的行将按距离排序。我已经从最终结果集中删除了分数列,我不确定在这种情况下您是否需要它

select id, title, description, publisher, city, state, date from (
    SELECT 
        id, title, description, publisher, city, state, date,
        MATCH (title, description, publisher) AGAINST ('pizza+view' IN BOOLEAN MODE) AS score,
        (3959 * acos( cos( radians('37') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('-122') ) + sin( radians('37') ) * sin( radians( latitude ) ) ) ) AS distance
    FROM job 
) t
where score > 0.01 or distance < 175
order by score desc, distance desc
limit 0, 30

UNION要求所有被联合的查询中的列数相同,并且每个位置的数据类型匹配。结果列的名称将取自UNION中的第一个SELECT;primus inter pares也在这里工作。也许你是想加入某种组织而不是加入工会?至少,如果您想要一些行的分数和其他行的距离,您需要考虑如何对查询进行短语化。可能您将联合作为子查询来执行,只是为了识别感兴趣的作业,然后针对每个感兴趣的作业重新计算?在最后一个结果查询中的距离和得分。考虑在第一个联合表表达式中添加一个缺省值和第二个评分中的缺省值。@ OMG小马:……并且因为它们省略了相应的关键字,推测它们的SQL产品不支持它,它不试图通过属性名称联合来匹配。要求联合的所有查询中的列数相同,并且每个位置的数据类型都匹配。结果列的名称将取自联合中的第一个SELECT;primus inter pares也在这里工作。也许你是想加入某种组织而不是加入工会?至少,如果您想要一些行的分数和其他行的距离,您需要考虑如何对查询进行短语化。可能您将联合作为子查询来执行,只是为了识别感兴趣的作业,然后针对每个感兴趣的作业重新计算?在最终结果查询中的距离和分数。考虑在第一个联合表表达式中添加一个缺省值和第二个评分中的缺省值。@ OMG小马:……并且因为它们省略了相应的关键字,推测它们的SQL产品不支持它,它不试图通过属性名称匹配。