我怎样才能在PHP中比较这些数据库值?

时间:2011-01-30 15:19:04

标签: php mysql

因此用户从下拉列表中选择一个值。我取这个值,把它放到一个变量中,然后从数据库中选择保存所选值的那个表A的ID值。

所以现在我正在尝试使用该ID值来获取多对多关系表,该表具有从表A到另一个表B的选定值。多对多关系表具有两个ID 。我如何使用PHP进行比较?

所以它会像:

$A = $_POST['a'];
$sql = "SELECT a, aID from TABLEA WHERE a = $A";

然后我该怎么做才能将aID与多对多关系表进行比较,然后获取该表中的其他ID,然后获取该ID以从表B中获取值?

2 个答案:

答案 0 :(得分:1)

您可以通过SQL中的联接来执行此操作:

SELECT table_b.* FROM ab_association
LEFT JOIN table_b ON table_b.id = ab_association.b_id
WHERE ab_association.a_id = $specified_id;

这假设您的多对多联接表名为ab_association并且有两列,一列名为a_id,对应table_a.idb_id对应到table_b.id

更新:我删除了表名别名,因为它们似乎让您感到困惑。

另一个更新:在PHP中,这是你将如何做到这一点(没有业务逻辑):

<?

// connect to db here
$a_id = mysql_real_escape_string($_POST['a_id']);
$result = mysql_query("SELECT table_b.* FROM ab_association LEFT JOIN table_b ON table_b.id = ab_association.b_id WHERE ab_association.a_id = $a_id;");

// in your view/template
while(false !== (mysql_fetch_object($result))) {
  // build your output for each row
}

?>

答案 1 :(得分:0)

SELECT * 
FROM table_a 
LEFT JOIN ab_association ON table_a.aID = ab_association.aID
LEFT JOIN table_b ON table_b.bID = ab_association.bID
WHERE table_a.a = $A

注意:

  • 我在表名中使用了一些下划线,所以table_a而不是TABLEA(就像Coreyward那样)来区分sql和名称
  • 如果不需要许多列,则应指定所需的列而不是“SELECT *”
  • 如果要在多对多中找不到匹配项时获取空记录集,则可以使用JOIN而不是LEFT JOIN。 (使用LEFT JOIN的优势是您仍然可以访问table_A中的列)
  • 在查询中直接使用$ _POST-vars是不明智的,这是一个严重的安全风险(SQL注入。)