Внешние ключи и нумерация страниц - PullRequest
1 голос
/ 07 июня 2010

Это мой сценарий разбиения на страницы:

    <?php
/***********************************
 * PhpMyCoder Paginator            *
 * Created By PhpMyCoder           *
 * 2010 PhpMyCoder                 *
 * ------------------------------- *
 * You may use this code as long   *
 * as this notice stays intact and *
 * the proper credit is given to   *
 * the author.                     *
 ***********************************/
?> 
 <head>
     <title> Pagination Test - Created By PhpMyCoder</title>
        <style type="text/css">
   #nav { font: normal 13px/14px Arial, Helvetica, sans-serif; margin: 2px 0; }
   #nav a { background: #EEE; border: 1px solid #DDD; color: #000080; padding: 1px 7px; text-decoration: none; }
   #nav strong { background: #000080; border: 1px solid #DDD; color: #FFF; font-weight: normal; padding: 1px 7px; }
   #nav span { background: #FFF; border: 1px solid #DDD; color: #999; padding: 1px 7px; }
  </style>
    </head>
     <?php
   //Require the file that contains the required classes
   include("pmcPagination.php");

   //PhpMyCoder Paginator
   $paginator = new pmcPagination(20, "page");

   //Connect to the database
   mysql_connect("localhost","root","PASSWORD");
   //Select DB
   mysql_select_db("tvguide");

   //Select only results for today and future
   $result = mysql_query("SELECT programme, channel, airdate, expiration, episode, setreminder FROM epdata1 where airdate >= now() order by expiration GROUP BY airdate");
   //You can also add reuslts to paginate here
   mysql_data_seek($queryresult,0) ;
           while($row = mysql_fetch_array($result))
   {
    $paginator->add(new paginationData($row['programme'],
               $row['channel'],
               $row['airdate'],
               $row['expiration'],
               $row['episode'],
               $row['setreminder']));
   }
  ?>
        <?php
   //Show the paginated results
   $paginator->paginate ();
  ?><? include("pca-footer1.php"); ?>
        <?php
   //Show the navigation
   $paginator->navigation();      
  ?>

Тем не менее, у меня есть две таблицы, и это epdata1 (где эфирное время для моего шоу House M.D.) и housemdep плюс таблица setreminder.

Как я могу использовать внешние ключи по отношению к этому? Я не уверен, сработает ли это для моего сценария, но я хочу попробовать.

То, что я хотел бы сделать, это выбрать определенные эпизоды из таблицы housemdep (эпизоды шоу), и если они выбраны, он показывает их так:

House M.D. showing on Channel 1 June 6th - 8:00pm "Wilson" Set Reminder
House M.D. showing on Channel 1 June 7th - 1:30am "Wilson" Set Reminder
House M.D. showing on Channel 1 June 7th - 12:55pm "House's Head" Set Reminder

или как, если я не выбрал эпизод из строки:

House M.D. showing on Channel 1 June 7th - 8:00pm "House's Head" Set Reminder
House M.D. showing on Channel 1 June 8th - 9:00pm  Set Reminder
House M.D. showing on Channel 1 June 9th - 2:30pm Set Reminder
House M.D. showing on Channel 1 June 7th - 8:00pm "Que Sera Sera" Set Reminder

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

Кроме того, я пытаюсь сделать так, как это делается для моей программы (вот как должен отображаться код, если вы нажали на View Source в вашем браузере):

<tr><td><b><a href="housemd.php">House M.D.</a></b></td><td>showing on <a href="channel/1"><i>Channel 1</i></a></td><td>June 9th - 7:00pm</td><td><b>"<a href="episodes/714790">House's Head</a>"</b></td><td><img src="reminder.gif" height="16" width="22"> <a href="reminder.php" alt="Set a reminder" target="_top">Set Reminder</a></td></tr>

Хаус М.Д. показ на Канал 1 10 июня - 12:25 утра "Голова Хауса" Установить напоминание Хаус М.Д. показ на Канал 1 10 июня - 12:55. Дом М.Д. показ на Канал 1 10 июня - 9:00 вечера "Уилсон" Установить напоминание Хаус М.Д. показ на Канал 1 11 июня - 1:30 утра "Уилсон" Установить напоминание Дом М.Д. показ на Канал 1 11 июня - 8:00 вечера "Living The Dream" Набор напоминания Дом М.Д. показ на Канал 1 12 июня - 19:00. Напоминание о наборе

Я попробовал кое-что из того, что Google предложил по внешним ключам в другой версии этого скрипта (это клон оригинала на моем локальном сервере, работающем под Apache и PHP 5.28 / MySQL), но я не уверен, как это реализовать .

Спасибо.

1 Ответ

0 голосов
/ 27 февраля 2011

Если я понимаю, что вы говорите, вы хотите, чтобы SQL-запрос соединял две таблицы и, основываясь на ответе базы данных, отображал строки несколько по-разному в зависимости от того, найдены ли строки в той или иной таблице.

Вы правы в том, что объединения - это то, что вы ищете, это просто звучит так, как будто вам нужно узнать типы объединений. ВНУТРЕННИЕ СОЕДИНЕНИЯ предназначены для ситуаций, когда вы ожидаете, что строки из одной таблицы всегда будут соответствовать строкам в другой таблице (и никогда не будут возвращать строки, если у них нет соответствующих строк). ЛЕВЫЕ СОЕДИНЕНИЯ предназначены для ситуаций, когда вы запрашиваете данные из одной таблицы, но у вас могут быть или не быть соответствующие строки, доступные в другой таблице.

Например: у человека всегда будут родители (ВНУТРЕННЕЕ СОЕДИНЕНИЕ).

SELECT
  person.id,
  relative.id
FROM
  person
INNER JOIN
  relative
ON
  person.biological_mother_id = relative.id

В этом примере будут возвращены строки, в которых значения как person.id, так иlative.id будут иметь значения, в противном случае база данных не будет возвращать строки, поскольку эти строки не соответствуют критериям INNER JOIN.

Однако, у человека не всегда будет домашнее животное (LEFT JOIN).

SELECT
  person.id,
  pet.id
FROM
  person
LEFT JOIN
  pets
ON
  person.id = pets.owner_id

В этом случае могут быть возвращены строки, где значение person.id имеет значение, но значение pet.id не имеет значения (в некоторых случаях значение NULL). Это связано с тем, что LEFT JOIN не накладывает ограничения на строки, возвращаемые как INNER JOIN, вместо этого он говорит, что «левая» или «первичная» таблица может возвращать значения строк, но это необязательно для «правых» или «вторичных» "таблицы для возврата значений.

Именно так мы используем реляционные базы данных, чтобы задавать вопросы об отношениях между таблицами. Если вы выполнили приведенный выше запрос о питомце, а pet.id возвращается ноль, вы знаете, что у этого человека нет домашних животных.

...