首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >真正的大noobie在这里,如何使用mysql使我可以轻松地编辑多个页面?

真正的大noobie在这里,如何使用mysql使我可以轻松地编辑多个页面?
EN

Stack Overflow用户
提问于 2011-03-26 07:58:09
回答 4查看 144关注 0票数 1

所以现在,我在我的网站主页上有一个“画廊”系统。看一看:

代码语言:javascript
运行
复制
<?php
        $objConnect = mysql_connect("mydb.db","hello","mypass") or die(mysql_error());
        $objDB = mysql_select_db("mydb");
        $pic2 = "SELECT * FROM gallery";
        if (!isset($_GET['Page']))  $_GET['Page']='0';
        $pic1 = mysql_query($pic2);
        $Num_Rows = mysql_num_rows($pic1);
        $Per_Page = 16;   // Per Page
        $Page = $_GET["Page"];
        if(!$_GET["Page"])
        {$Page=1;}
        $Prev_Page = $Page-1;
        $Next_Page = $Page+1;
        $Page_Start = (($Per_Page*$Page)-$Per_Page);
        if($Num_Rows<=$Per_Page)
        {$Num_Pages =1;}
        else if(($Num_Rows % $Per_Page)==0)
        {$Num_Pages =($Num_Rows/$Per_Page) ;}
        else
        {$Num_Pages =($Num_Rows/$Per_Page)+1;
            $Num_Pages = (int)$Num_Pages;}
        $pic2 .=" order  by GalleryID ASC LIMIT $Page_Start , $Per_Page";
        $pic1  = mysql_query($pic2);
$cell = 0;
$link2 = "SELECT * FROM gallery";
$link1 = mysql_query($link2);
$link = mysql_fetch_array($link1);
$alt2 = "SELECT * FROM gallery";
$alt1 = mysql_query($alt2);
$alt = mysql_fetch_array($alt1);
echo '<div id="tablediv"><table border="0" cellpadding="17" cellspacing="0" class="table"><tr>';
while($pic = mysql_fetch_array($pic1))
{if($cell % 4 == 0) {
    echo '</tr><tr>';}
if($cell == 2) {
    echo '<td>reserved cell, ignore this</td>';
} elseif ($cell == 3) {
    echo '<td>reserved cell, ignore this</td>';
} else {
    echo '
    <td><a href="/' . $link["link"] . '.php"><div class="image"><img src="https://s3.amazonaws.com/images/' . $pic["pic"] . '" alt="' . $alt["alt"] . ' /></div></a></td>'; }
    $cell++;
}
echo '</tr></table></div>';
    ?>

我的表应该是这样的:

代码语言:javascript
运行
复制
CREATE TABLE `images` (
  `thumbnailID` int(11) NOT NULL auto_increment,
  `link` varchar(100) NOT NULL,
  `pic` varchar(100) NOT NULL,
  `alt` varchar(100) NOT NULL,
  PRIMARY KEY  (`thumbnailID`)
) ENGINE=MyISAM ;

INSERT INTO `images` VALUES ('', 'stars/beezlebub', 'beezlebub', 'this is beezlebub');
INSERT INTO `images` VALUES ('', 'nature/raretree', 'raretree', 'this is a rare tree');
INSERT INTO `images` VALUES ('', 'nature/lions', 'lions', 'these are lions');
INSERT INTO `images` VALUES ('', 'nature/tigers', 'tigers', 'these are tigers');
etc. (you get the point)

不管怎样..。正如您所看到的,使用此系统,每当我插入新记录时,它都会自动更新我的图库。现在我的问题是,当我插入一条新记录时,我如何才能做到这一点,它不仅影响我的主页图库,还会影响我网站其他部分的图库。不知道我在说什么?下面是一个例子:

假设我的网站名为site.com。我还有site.com的子文件夹,其中包括site.com/site.com和site.com/stars。我希望我的site.com/nature包含一个仅用于明星照片的图库,而我的site.com/stars则是一个仅用于明星照片的图库,而我的主页包含所有图像,包括自然和明星照片。但我不想通过创建额外的表来手动更新/nature或/stars。相反,我只想使用一个巨大的表,其中包含我网站上的所有图像,但这样我就可以指定我的记录是否也显示(/nature、/stars等),而不仅仅是主页(它包含所有图像)。

我假设我需要另一个列(显然)来指定我希望我的记录出现在哪些其他文件夹中,或者可能需要一些条件语句来确定我的记录也应该出现在哪个子文件夹中,而不仅仅是我的主页。不幸的是,我是一个无名小卒,所以我在问是否有人能帮上忙。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-26 08:04:28

你走在了正确的轨道上,下面是我将如何构造这个表,以进行此更正:

代码语言:javascript
运行
复制
CREATE TABLE `images` (
    `thumbnailID` int(11) NOT NULL auto_increment,
  `folderID` varchar(100) NOT NULL,
    `link` varchar(100) NOT NULL,
    `pic` varchar(100) NOT NULL,
    `alt` varchar(100) NOT NULL,
    `time` varchar(100) NOT NULL,
PRIMARY KEY (thumbnailID))
ENGINE=MyISAM;

注意这个凹陷的行……

编辑 *很抱歉,没有包含有关插入的部分。下面是你要运行的SQL语句,你可以在下面插入一张图片,比方说,“性质”:

代码语言:javascript
运行
复制
INSERT INTO `images` (
`thumbnailID`, `folderID`, `link`, `pic`, `alt`, `time`
) VALUES (
NULL, 'nature', 'some link', 'some picture', 'some alt text', 'some timestamp'
)

注意,"thumbnailID“是空的,因为MySQL会自动填充它,因为它是主键。

End编辑 *

当你在一个特定的文件夹中运行你的SQL时,比如“性质”文件夹,下面就是你如何提取所有归入“性质”的数据:

代码语言:javascript
运行
复制
SELECT * FROM `images` WHERE `folderID` = 'nature' ORDER BY `thumbnailID` ASC;

希望这能有所帮助,

spryno724

票数 1
EN

Stack Overflow用户

发布于 2011-03-26 08:09:20

是的,你是对的。快速、简单的方法是创建另一个列。

但是,您真正应该做的是创建另一个表,名为sections或类似的表。它应该看起来像这样:

代码语言:javascript
运行
复制
----------------
| id | name    |
----------------
| 1  | stars   |
| 2  | nature  |
...

放入主表中的新列将指向该表的id列。

代码语言:javascript
运行
复制
------------------------------------------------------------------
| thumbnailID | link       | pic       | alt         | sectionID |
------------------------------------------------------------------
| 1           | ...        | raretree  | this is ... | 2         |
...

最后一列sectionID引用了表sections中的第二项。

接下来,创建一个名为/section/的文件夹,并在其中创建一个名为section.php的新页面。假设您想要查看如下所示的部分:

http://example.com/section/section.php?section=nature

您可以使用$_GET['section']获取该部分,并执行如下的SQL JOIN

代码语言:javascript
运行
复制
SELECT * FROM `sections` JOIN `images` ON `images`.`sectionID` = `sections`.`id` WHERE `sections`.`name` = {section}

{section}的值替换为$_GET['section']

您甚至可以更改它,以便像这样访问部分:

http://example.com/section/nature

mod_rewrite在一起。

http://www.snipe.net/2009/02/practical-mod_rewrite/

http://en.wikipedia.org/wiki/Cardinality_(data_modeling

http://www.webdesign.org/web-programming/php/mysql-join-tutorial.14876.html

票数 2
EN

Stack Overflow用户

发布于 2011-03-26 08:19:33

你的图库中的图像会属于两个或更多的部分吗?或者图像将只属于一个画廊?我假设图像可以存在于许多画廊中,因为图像可能是星星和自然的图像。

如果它们可以交叉发布,那么您还需要另外两个表。

代码语言:javascript
运行
复制
Images 
Folders(id, name)
Images_Folders(image_id, folder_id)

这样您就不需要更改Images表了。只需确保当某个内容被“标记”时,您可以在Images_Folders中适当地插入一个条目。

要获取恒星的所有图像,您需要执行以下操作:

代码语言:javascript
运行
复制
SELECT i.*
FROM images i
JOIN images_folders if ON i.id = if.image_id
JOIN folders f on f.id = if.folder_id
WHERE folder_name = 'stars'

编辑:标记只是意味着图像被认为属于特定的组或文件夹。因此,如果用户上传了一个文件夹(或者您上传了),该文件夹将存在于image表中。要“标记”它,需要对images_folder表执行插入操作。

代码语言:javascript
运行
复制
$folder = 'stars';
$image_id = 4;

INSERT INTO images_folder (image_id, folder_id)
SELECT image_id = $image_id,
       folder_id = (SELECT folder_id FROM folders WHERE name = $folder)

我在那里混合了SQL和PHP,所以这不是有效的代码,但它应该能满足您的需求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5439337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档