从站点运行时,查询会给出不同的结果

时间:2011-11-22 10:35:59

标签: php mysql

我在数据库上运行搜索,以查找包含停止已在搜索字段中输入的端口的游轮。因此,用户键入“都柏林”,他们将返回停在那里的所有游轮。

我有两张桌子,游轮包含所有游轮和行程,其中包含游轮上的停靠点。它们与cruises.id和itinerary.cruise_id有关。

我在MySQL工作台中运行的查询看起来像这样,我把阿姆斯特丹作为搜索内容的一个例子

SELECT id, title, code FROM cruises WHERE EXISTS (SELECT * FROM itinerary WHERE port LIKE '%amsterdam%' AND cruises.id = cruise_id)

显然在我的网页上,我使用过

SELECT id, title, code FROM cruises WHERE EXISTS (SELECT * FROM itinerary WHERE port LIKE %s AND cruises.id = cruise_id)

工作台查询完全符合我的要求,返回八次巡航,全部停在阿姆斯特丹

网页查询会返回八个匹配项,但它们都是相同的记录吗?

有什么想法吗?

感谢

Rich:)

好的,这是获取搜索变量并进行查询的页面顶部的代码

$colname_search = "-1";
if (isset($_POST['search'])) {
 $colname_search = $_POST['search'];
}

$query_search_cruises = sprintf("SELECT id, title, code FROM cruises WHERE EXISTS     (SELECT * FROM itinerary WHERE port LIKE %s AND cruises.id = cruise_id )",     GetSQLValueString("%" . $colname_search . "%", "text"));
$search_cruises = mysql_query($query_search_cruises, $connection) or die(mysql_error());
$row_search_cruises = mysql_fetch_assoc($search_cruises);
$totalRows_search = mysql_num_rows($search_cruises);

这一点正在输出。

<h2><?php if($row_search_cruises["title"]) { echo "Your search for \"" . $_POST['search'] . "\"was found here.."; } else { echo "Sorry no matches have been found"; } ?></h2>
<?php do { ?>
<p><?php echo "<a href=\"cruise_details.php?id=" . $row_search_cruises["id"] . "\">{$row_search_cruises['code']}, {$row_search_cruises['title']}</a>"; ?> </p><br />
<?php } while ($row_search = mysql_fetch_assoc($search_cruises)); ?>

3 个答案:

答案 0 :(得分:1)

尝试:

SELECT id, title, code FROM cruises WHERE EXISTS (SELECT * FROM itinerary WHERE port LIKE '%%s%' AND cruises.id = cruise_id)

%是MySQL中的通配符,这意味着您可以获得阿姆斯特丹位于文本中间的结果。

不确定这是否有效,也许你需要逃避%的

编辑:我认为你已经回应了你的查询,确保%s实际上有你期望的内容?

答案 1 :(得分:0)

编辑:与上述相同 -

不应该是网络查询吗?

'%阿姆斯特丹%'

不是

'%S%'

    SELECT id, title, code FROM cruises WHERE EXISTS (SELECT * FROM itinerary WHERE port LIKE %s AND cruises.id = cruise_id)

答案 2 :(得分:0)

顺便说一下,您可能会发现用“JOIN”替换“EXISTS”会更有效率。

SELECT t1.id, t1.title, t1.code FROM cruises t1 JOIN itinerary t2 WHERE t2.port LIKE '%%s%' AND t1.id = t2.cruise_id