2010-06-06 1 views
1

Это мой нумерацией страниц сценария:Внешние ключи и нумерацией страниц

<?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 (где airtimes для моего шоу House MD есть) и 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> 

House MD показывает на Channel 1 10 июня - 12:25 утра «Голова Хауса» Установить напоминание House MD показывая на Channel 1 10 июня - 12:55 вечера   Установить напоминание House MD показывая на Channel 1 10 июня - 9:00 вечера "Wilson" Set Напоминание House MD показывая на Канал 1 11 июня - 1:30 утра "Wilson" Set Напоминание House MD показывая на канал 1 11 июня - 8:00 вечера "Living The Dream" Установить напоминание House MD показывая на Channel 1 12 июня - 7:00 вечера   Set R eminder

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

Спасибо.

+0

с чем вы столкнулись? Вам нужна помощь в запросе базы данных, связывающем таблицы вместе с внешними ключами? Если нет, соедините таблицы вместе и посмотрите, что делает ваша разбивка на страницы. лучший способ учиться - попробовать. внести изменения в исправление. Кроме того, это не самый лучший способ разбиения на страницы запроса. Если ваш запрос имеет 10k результатов, он будет буферизовать все эти результаты, а затем вы используете только 20 (или независимо от вашего значения на странице) из этого буферизованного списка из 10k. Как правило, лучше использовать ключевое слово mysql LIMIT, чтобы просто вернуть ваш запрос только количество требуемых строк. –

+0

У меня возникли проблемы с использованием запроса базы данных, соединяющего таблицы вместе с внешними ключами, вот в чем суть этого. Что касается моего сценария разбиения на страницы, который показывает 20 строк на сценарий, это бесплатный скрипт, который я использую;) – whitstone86

ответ

0

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

Вы правы в том, что соединения - это то, что вы ищете, это просто похоже на то, что вам нужно узнать типы объединений. INNER JOINs - это ситуации, когда вы ожидаете, что строки из одной таблицы всегда будут соответствовать строкам в другой таблице (и никогда не возвращать строки, если у них нет соответствующих строк).LEFT JOINs предназначены для ситуаций, когда вы запрашиваете данные из одной таблицы, но вы можете иметь или не иметь соответствующие строки, доступные в другой таблице.

Например: У человека всегда будут родители (INNER JOIN).

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

В этом примере строка будет возвращена, когда оба person.id и relative.id будут иметь значение, в противном случае, база данных не будет возвращать строки, потому что эти строки не соответствуют INNER 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 возвращается null, вы знаете, что у этого человека нет домашних животных.

 Смежные вопросы

  • Нет связанных вопросов^_^