我的数据库中有两个表:
1) 博客表2) 内容
在blog_table
中,我具有被称为postID
的值,这些值可能与表content
中被称为id
的值匹配,也可能不匹配。我想知道如何编写while循环或foreach循环,该循环将循环通过content
表,如果id
等于blog_table
中postID
的值,则执行一个操作,如果不等于,则执行另一个操作。
现在我只能得到id
=postID
$blog_table = $_REQUEST['blog_table'];
$getblogtable = mysql_query("SELECT * FROM content WHERE type = '5' AND blogID = '{$_REQUEST['id']}' ORDER BY `order` ASC");
while ($row = mysql_fetch_assoc($getblogtable))
{
$getblogposts1 = mysql_query("SELECT postID FROM `$blog_table`");
while ($row1 = mysql_fetch_assoc($getblogposts1))
{
if( $row1['postID'] == $row['id']) {
echo "do something<br>";
}else{
echo "do something else<br>";
}
} echo "<p></p>";
}
[根据OP的意见和修改后的问题进行编辑]
$getblogposts = mysql_query("SELECT * FROM content WHERE type = '5' AND blogID = '{$_REQUEST['id']}' ORDER BY `order` ASC");
while ($row = mysql_fetch_assoc($getblogposts))
{
$matches = mysql_query("SELECT * FROM $blog_table WHERE postID = $row['id']");
if (mysql_num_rows($matches) > 0)
{
// do something
}
else
{
// do something else
}
}
关于不同的设计,我不能确定它是否有必要,但我不喜欢运行这样的查询循环。我认为在这种情况下,一个查询就足以获得所需的一切。也许如果您描述您的应用程序,我们可以找到更好的查询或更合适的设计。
只是为您的问题提供一个更易于查看的解决方案。
我建议使用内部联接,这将解决手头的问题。
例如:
从内容中选择*作为C INNER在B.postID=C.id 上加入$blog_table作为B
这里有一个关于联接(内部、左侧、右侧、完整)的精彩介绍:
http://www.w3schools.com/sql/sql_join.asp
$blog_table = $_REQUEST['blog_table'];
$getblogtable = mysql_query("SELECT postID FROM `$blog_table`");
while ($row = mysql_fetch_assoc($getblogtable))
{
$postID = $row['postID'];
$getblogposts1 = mysql_query("SELECT * FROM content WHERE id = '$postID' ORDER BY `order` ASC");
while ($row1 = mysql_fetch_assoc($getblogposts1))
{
// if( $row1[id] == $postId )
// do something
// else
// do something else
}
}