我在数据库上运行搜索,以查找包含停止已在搜索字段中输入的端口的游轮。因此,用户键入“都柏林”,他们将返回停在那里的所有游轮。
我有两张桌子,游轮包含所有游轮和行程,其中包含游轮上的停靠点。它们与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)); ?>
答案 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