2013-05-07 2 views
0

Я строю простой газетный сайт из-за школьной работы. У меня две таблицы в моей базе данных.Каков наилучший способ получить информацию о категории и информацию о статье одновременно с mysql/php?

Категории [CategoryID, CategoryName, ParentID (что указывает на cat.id)]

Статья [ArticleID, заглавия, Teasertext, Материалами дате, категории (что внешний ключ CategoryID)]

На первой странице я вынимаю последние статьи, и ниже каждой статьи должна быть ссылка на статью (которая основана на index.php? Name = CategoryName & parent = ParentID).

Мне нужно снять соответствующую информацию о CategoryName и ParentID из категории-информации в статьях-таблице.

Я застрял на том, как объединить два запроса в одном. Мне интересно, есть ли у вас какие-либо идеи о том, как ее решить?

Это то, что я получил.

function display_articles($link) 
{ 

    $result = mysqli_query($link, "SELECT * FROM Article ORDER BY Date DESC"); 

       if (!$result) 
       { 
        $error = 'Error fetching Articles: ' . mysqli_error($link); 
        exit(); 
       } 


       while ($row = mysqli_fetch_array($result)) 
       { 
        $Heading[] = $row['Heading']; 
        $Teasertext[] = $row['Teasertext']; 
        $Date[] = $row['Date']; 
       } 


       if (isset($Heading)) 
       { 
        for ($i=0; $i<count($Heading); $i++) 
        { 

         echo '<div class="frontpage"><h2>' .htmlspecialchars($Heading[$i], ENT_QUOTES, "UTF-8"). '</h2>'; 
         echo htmlspecialchars($Date[$i], ENT_QUOTES, "UTF-8"); 
         echo '<p class="Teasertext"> ' .htmlspecialchars($Teasertext[$i], ENT_QUOTES, "UTF-8"). '</p></div>'; 
         echo '<a href="index.php?name='     
        } 
       } 

} 
+0

Вы в настоящее время только один запрос в вашей выборке. Итак, какие два вопроса вы пытаетесь объединить? Вы читали какую-либо документацию MySQL/SQL? Вы знаете, как использовать JOINs? –

+0

Очевидно, что нет. Я прочитаю об этом, tnx! –

+1

Вы также можете не захотеть использовать 'SELECT *'. По моему опыту, очень мало случаев, когда вам действительно нужны все столбцы данных в запросе. Хотя использование «SELECT *» может показаться простым способом написания кода, это делает ваше приложение потенциально обрабатывать больше данных, чем нужно, замедляет производительность при работе с вашим набором результатов и потребляет больше памяти, чем необходимо, по путь. –

ответ

0

Используйте присоединиться:

SELECT 
    a.*, c.CategoryName, c.ParentID 
FROM 
    Article AS a 
    INNER JOIN Category AS c on a.category = c.categoryId 
ORDER BY a.Date DESC 
+0

есть что-то новое, что я должен прочитать, tnx ... –

+0

@MichaelScott Я предлагаю вам изучить SQL, проверить онлайн-учебники. Использование 'Join' является основополагающим в большинстве задач базы данных – Barranka

0

Ваш запрос должен быть таким:

SELECT 
     a.*,c.* 
FROM 
     Article a LEFT JOIN 
     Categories c on (a.category=c.categoryid) 
ORDER BY 
     a.Date DESC 
Смежные вопросы