php - 表 2 B 列中的返回值,其中表 1 A 列与表 2 A 列匹配

标签 php mysql

我想要做什么:其中类别(项目)匹配id (市场) echo 类别 (市场)

表 1 示例(项目表)

projects table

表 2 示例(市场表)

enter image description here

PHP 代码示例

$num_rec_per_page=5;
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 
$start_from = ($page-1) * $num_rec_per_page; 

 function GET($key) {
    return isset($_GET[$key]) ? $_GET[$key] : null;
}

$category= GET('category');

if ($category !== null) {
    $sql = "SELECT * FROM projects WHERE category='$category' LIMIT $start_from, $num_rec_per_page";
} else {
    $sql = "SELECT * FROM projects LIMIT $start_from, $num_rec_per_page";
}

$sql_query = mysql_query($sql);
$post = $sql_query;

$sql1 = "SELECT * FROM markets";
$sql_query1 = mysql_query($sql1);
$marketsinfo = mysql_fetch_array($sql_query1);

在下面的代码中,我尝试在主 while 循环中放置一个 while 循环,因为我们必须找出它所属的类别,然后为每个博客文章显示它。

它只适用于第一个结果,然后我在网上做了一些研究,发现这样做的设计非常糟糕。

我当前显示结果的位置(请参阅连字符之间的代码):

            <!-- Blog - Start -->
        <?php while ($post = mysql_fetch_array($sql_query)) {?>
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 blog blog_altered blog_left">
            <div class="row">
                <!-- Blog Image - Start -->
                <div class=" col-lg-6 col-md-6 col-sm-10 col-xs-12  pic inviewport animated delay1" data-effect="fadeIn">
                    <img alt="blog-image" class="img-responsive" src="<?php echo $post['imageoutside'] ?>">
                </div>
                <!-- Blog Image - End -->
                <!-- Blog Info - Start -->
                <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 inviewport animated delay1" data-effect="fadeIn">
                    <div class="info">
----------------------------------------------------------------------
                        <span class="date">
                        <?php
                            if($post['category'] === $marketsinfo['id']){
                                echo $marketsinfo['category'];
                            }
                         ?>
                         </span>
----------------------------------------------------------------------
                        <h4 class="title"><a href="projects/readmore.php?job=<?php echo $post['job'] ?>"><?php echo $post['title'] ?></a></h4>
                        <p><?php echo $post['summary'] ?></p>
                        <a class="btn btn-primary text-on-primary"  href="projects/readmore.php?job=<?php echo $post['job'] ?>">Read More</a>
                    </div>
                </div>
                <!-- Blog Info - End -->
            </div>
        </div>
        <?php } ?>
            <!-- Blog - End -->

希望我已经足够彻底,不会造成混淆。菜鸟怎么能做到这一点呢?我会接受您的任何指点!!

最佳答案

如果使用联接,则可以在一次查询中获取类别文本,并避免 PHP 中的所有循环。

左连接将返回项目中的所有记录,并且仅返回与市场匹配的记录。因此,如果市场中不存在项目类别,则会返回 NULL 值。

如果您使用 INNER JOIN,则只会返回在两个表中都有对应值的记录。

经验法则:当您需要时,一次性从数据库中获取您需要的数据。 PHP 格式,SQL 格式 Datagrab。不要得到超过你需要的,也不要得到少于你需要的。

SELECT P.Job, M.ID as Markets_ID, M.Category, P.Title
FROM projects P
LEFT JOIN Markets M
 on P.Category =M.ID 
WHERE P.category='$category'   
LIMIT $start_from, $num_rec_per_page"

注意:您需要在 where 子句中的类别上添加表别名。我假设您传递了 ID,因此使用了 P.Category。

关于php - 表 2 B 列中的返回值,其中表 1 A 列与表 2 A 列匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41698899/

相关文章:

php - 删除mysql中的重复行,保留XX行

php - 使用 AngularJS 处理 PHP $_POST?

php - Android pay , samsung pay 在网站上使用 php

php - 在 SQL 中存储标签并检索它

mysql - 查询未返回结果,左连接

java - java中使用Json对象更新数据库

PHP PDO 准备查询拒绝正确执行 - 转义问题?

php - 提交抽象类和子类的最佳实践?

php - 如何根据用户信息展示数据

Mysql "not in"选择问题