我需要形成一个单独的mysql查询,以从具有ID的表中获取*数据,以及与第一个查询的“标题”匹配的4个相关数据。
表名: Feeditems
行:
item_id
,item_title
,item_description
获取我正在使用的数据
$related_sql = "SELECT * FROM feeditems
WHERE feeditems.item_id='$id' LIMIT 1";
获取我正在使用的相关数据
$related_sql = "SELECT * FROM feeditems
WHERE feeditems.item_id != '$item_row[item_id]'
AND MATCH (feeditems.item_title)
AGAINST ('$item_row[item_title]' IN BOOLEAN MODE)
ORDER BY feeditems.item_id DESC LIMIT 4";
我需要将这两个查询组合成一个查询,因为我使用以下代码给出了查询的json数据
$set = array();
$total_records = mysql_num_rows($resouter);
if($total_records >= 1){
while ($link = mysql_fetch_array($resouter, MYSQL_ASSOC)){
$set['NewsApp'][] = $link;
}
}
echo $val= str_replace('\\/', '/', json_encode($set,JSON_UNESCAPED_UNICODE));
否则有任何方法可以使用json_encode将上述2个查询的结果合并到一个json outout中。
答案 0 :(得分:1)
您可以使用INNER JOIN链接回同一个表:
$related_sql = "SELECT f2.item_id, f2.item_title, f2.item_description
FROM feeditems f1
INNER JOIN feeditems f2 ON
f1.item_id != f2.item_id AND
MATCH (f2.item_title) AGAINST (f1.item_title IN BOOLEAN MODE)
WHERE f1.item_id='$id'
ORDER BY f2.item_id DESC LIMIT 4";
更新:我发现由于您使用的是MATCH ... AGAINST
,因此无效。
"表达式不必是文字字符串,但它必须是在查询评估期间具有常量值的表达式。例如,这允许变量,但排除列名。"
查看http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html#function_match,http://bugs.mysql.com/bug.php?id=66573和MySQL Fulltext search against column value?
就像lolka_polka所说的那样,使用子查询它会起作用:
$related_sql = "SELECT item_id, item_title, item_description
FROM feeditems
WHERE item_id != '$id' AND
MATCH (item_title) AGAINST ((SELECT item_title FROM feeditems
WHERE item_id='$id' LIMIT 1) IN BOOLEAN MODE)
ORDER BY item_id DESC LIMIT 4";
请参阅SQLFIDDLE
UPDATE2 :使用UNION
$related_sql = "(SELECT item_id, item_title, item_description
FROM feeditems
WHERE item_id = '$id' LIMIT 1)
UNION
(SELECT item_id, item_title, item_description
FROM feeditems
WHERE item_id != '$id' AND
MATCH (item_title) AGAINST ((SELECT item_title FROM feeditems
WHERE item_id='$id' LIMIT 1) IN BOOLEAN MODE)
ORDER BY item_id DESC LIMIT 4)
ORDER BY item_id;";
请参阅SQLFIDDLE
答案 1 :(得分:0)
您可以在查询中使用子查询。试试这个:
$related_sql = "
SELECT *
FROM feeditems
WHERE feeditems.item_id != $id
AND MATCH (feeditems.item_title) AGAINST ((SELECT item_title WHERE feeditems.item_id=$id) LIMIT 1 IN BOOLEAN MODE)
ORDER
BY feeditems.item_id DESC
LIMIT 4
";
注意强>
不要使用mysql
函数,不推荐使用它们。请改用mysqli
或PDO
。
您很容易受到sql注入攻击。始终在查询中使用变量,或使用预准备语句。