【问题标题】:trying to form SQL join on several tables试图在几个表上形成 SQL 连接
【发布时间】:2013-12-10 21:21:54
【问题描述】:

所以如果可能的话,我试图弄清楚如何用 1 个查询来做到这一点。这是我的几个查询

$file_url = 'http://'.$cms.'/filemanager/gallery';
$link_url = '/our-process/gallery/';
include 'inc/config.php';
function gallerySafeName($var){
    $var = strtolower(preg_replace('([^a-zA-Z0-9_])','-',$var));
    return $var;
}
$galleryimages = array();
$sql = "SELECT * FROM `cms_gallery_categories` ORDER BY RAND() LIMIT 3";
$result = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($result)){
    $sql1 = "SELECT * FROM `cms_gallery_images` WHERE `image_id` = ".$row['category_image_id'];
    $result1 = mysqli_query($con,$sql1);
    while ($row1 = mysqli_fetch_array($result1)){
        $sql2 = "SELECT * FROM `cms_gallery` WHERE `gallery_id` = ".$row1['gallery_id'];
        $result2 = mysqli_query($con,$sql2);
        while ($row2 = mysqli_fetch_array($result2)){
            print '<li>
            <a href="'.$link_url.$row['category_name'].'/'.$row2['gallery_name'].'/'.gallerySafeName($row1['image_caption']).'/">
            <img  width="210" height="133" border="0" src="'.$file_url.'/'.$row['category_name'].'/'.$row2['gallery_name'].'/'.$row1['image_name'].'" />
            </a>
            </li>';
        }
    }
}

我试图从图库类别和分配给代表该类别的图像中获取 3 个随机条目。然后获取画廊名称,然后是图像名称,形成一个img src和链接。我的表结构如下

-cms_gallery_categories
category_id
category_title
category_name
category_image_id

-cms_gallery
gallery_id
gallery_title
gallery_name
category_id

-cms_gallery_images
image_id
image_name
image_caption
gallery_id

图片属于画廊,画廊属于类别

【问题讨论】:

    标签: php mysql sql join


    【解决方案1】:
    SELECT GC.*, G.*, I.*
    FROM cms_gallery_categories GC
    INNER JOIN cms_galleries G ON (G.category_id = GC.category_id)
    INNER JOIN cms_gallery_images I ON (I.gallery_id = G.gallery_id)
    ORDER BY RAND() LIMIT 3
    

    您需要将字段限制为仅需要的字段。从我在您的代码中可以看到,是这样的:

    SELECT GC.category_name, G.gallery_name, I.image_caption FROM...
    

    更多信息

    【讨论】:

    • 为什么不用“SELECT *”而不是“SELECT GC.*, G.*, I.*”?
    • @user4035 因为在演示上下文中将它们分开会更清楚。
    • 当然把 * 改成你需要的列 * 效率不高。
    • 我对 GC、G 和我感到困惑,这应该是什么?
    • @drooh 它们是您的表格的别名,您可以随意制作它们。我只使用了 GC、G 和 I,因为它们很短。
    猜你喜欢
    • 2020-03-05
    • 2023-02-09
    • 2020-02-10
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多