Желание использовать одну таблицу MySQL для воздействия на несколько страниц - PullRequest
1 голос
/ 26 марта 2011

Итак, сейчас у меня есть система "галерей" на моей домашней странице моего сайта. Взгляните:

<?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>';
    ?>

Во всяком случае ... как вы можете видеть, с этой системой, когда я вставляю новую запись, она автоматически обновляет мою галерею. Теперь мой вопрос: как мне сделать так, чтобы при вставке новой записи она не только влияла на галерею моей домашней страницы, но и на галереи в других подразделах моего сайта.

Скажите, что мой сайт называется site.com. У меня также есть site.com/nature. Мой site.com/nature предназначен только для фотографий природы, но я не хочу обновлять вручную / nature, создавая новый набор таблиц и обновляя их вручную. Скорее я бы предпочел более простой маршрут, поэтому в своей таблице галереи я могу указать, хочу ли я его в /nature.

Полагаю, мне понадобится еще один столбец (очевидно), чтобы указать, в каких других папках я хочу, чтобы моя запись отображалась, или, возможно, некоторые условные операторы, чтобы определить, в какой подпапке должна быть моя запись, а не только на моей домашней странице. К сожалению, я новичок, поэтому я спрашиваю, могут ли мои коллеги-штабелеры помочь мне в этом. Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 марта 2011

Есть несколько способов сделать это. Поскольку вы не хотите создавать другую таблицу, вы можете использовать один из подходов - использовать столбец типа данных SET . Это позволит вам создать набор всех ваших подразделов (до 64), причем один элемент галереи может быть в нескольких подразделах.

Возможные проблемы - это ограничение в 64 подраздела, разумеется, и тот факт, что для добавления нового подраздела требуется оператор ALTER, который, в зависимости от того, как вы добавляете подраздел, может вызвать проблемы с разрешениями среди прочего.

На мой взгляд, лучше добавить две новые таблицы. Одна таблица будет таблицей подразделов, для которой требуется только идентификатор и путь подраздела («природа»). Другая таблица будет таблицей подразделов галереи, которая имеет идентификатор галереи и идентификатор подраздела, так что один элемент галереи может находиться в нескольких подразделах. Это не только легче добавить новый подраздел, но также позволяет использовать более 64 подразделов.

0 голосов
/ 26 марта 2011

Я не уверен в точной схеме, которую вы используете, но если ваша галерея подразделяется на категории, такие как природа, анимация.Лучше всего иметь один дополнительный столбец («категория»), вероятно, varchar или строку (извините, не знакомы с точными типами в mysql), которая задает категорию, поэтому в категории природы вы должны выглядеть так:* Таким образом, если у вас есть другая категория, например, pokemon, вы можете перейти:

select *
from gallery g
where g.category = 'pokemon'

Таким образом, вы можете иметь много разных категорий для своего сайта.у картинок просто есть:

select *
from gallery g

Кроме того, лучше всего, чтобы вместо возврата * вы возвращали только те поля, которые вам действительно нужны.И возможно использование select DISTINCT filndName, чтобы вы не получали повторы одного и того же кортежа (записи) при извлечении его из sql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...