【发布时间】:2026-01-20 03:25:01
【问题描述】:
编辑:以下代码显示了问题的答案。感谢 VolkerK。
$result = mysqli_query($link,"SELECT ctas.*, ctas_pr.*, nav.id
FROM web_ctas AS ctas
LEFT JOIN web_ctas_page_relation AS ctas_pr
ON ctas.id = ctas_pr.cta_id
LEFT JOIN web_navbar AS nav
ON ctas_pr.navbar_id = nav.id
AND nav.link_name = '".$page."'")
or die(mysqli_error($link)
);
早上好/下午/晚上,
我希望你们中的一些人可以帮助我解决有关 mySQL 的特定问题。
我正在尝试JOIN 两个表传递一些逻辑并取回匹配的相关字段数据,我必须解释过程和表,以便您对代码和过程有一点了解。
“web_ctas”表有一个与 web_navbar 表对应的关系字段。
非常感谢任何可以在此问题上提供帮助的人。
下面是两张表:
web_ctas
id | title | img_src | img_alt | link_href | link_title | desc
==============================================================
1 | title | pears | apples | foo | bar | blah
2 | title | apples | pears | bar | foo | bleh
web_navbar
id | link_name | visible
========================
1 | home | 1
2 | products | 1
web_ctas_page_relation
id | cta_id | navbar_id
=======================
1 | 1 | 2
2 | 2 | 2
以下是我到目前为止的 SQL(我知道这可能根本行不通):
$query = mysqli_query($link,"SELECT web_ctas.*, web_navbar.id AS nav_id
FROM web_ctas
JOIN web_navbar
ON web_navbar.id = web_ctas.page_relation
AND page_relation='".$page."'");
下面是 HTML/PHP,它将从 SQL 查询结果中提取数据。
$page = 'home';
while($row = mysqli_fetch_object($query)): ?>
<li>
<a href="<? echo $row->link_href; ?>" title="<? echo $row->link_title; ?>">
<h3><? echo $row->title; ?></h3>
<div>
<img src="<? echo $row->img_src; ?>" alt"<? echo $row->img_alt; ?>">
</div>
</a>
</li> <?
endwhile;
因此,简而言之,我正在寻找一种方法,当 web_navbar 表与 web_ctas 中的一行匹配时,它可以从该表中获取 link_name 字段 在 page_relation 字段中具有关系 id 并匹配变量 $page。
如果我遗漏了任何关键代码/信息,请告诉我。
【问题讨论】:
-
为了使您的查询与 SQL 注入相比更加健壮,请使用 prepare statement 进行查询。
-
没有用户可以输入数据以传递给数据库的形式,如果是这种情况,用户/黑客仍然可以将字符串传递给数据库吗?
-
更改表格布局是否可能/可行?您当前的布局违反了第一范式。有(很好的)理由忽略数据库规范化;但您的问题似乎不属于该类别;-) 请参阅en.wikipedia.org/wiki/First_normal_form
-
刚刚快速阅读,这很有意义,ty。如果我理解正确,我需要制作第三个表'web_ctas_page_relation',其中包含 id|cta_id|navbar_id ??
-
third table ... that contains id|cta_id|navbar_id- 正确