Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод категорий и за ними то что в них
 
 автор: Panker   (10.05.2007 в 17:09)   письмо автору
 
 

Есть таблица Theme ( В ней записаны темы сайтов )
Есть таблица Domen ( В ней записаны адреса сайтов и темы по id )

то есть примерно так

Theme - id, name, theme
Domen - id, name, theme

В домене у меня записано допустим так - 1, rambler.ru, поисковик
А в темах у меня так - 1, поисковики, третье поле пустое ( ненужное можно сказать )

Как мне в списке вывести типа

----Поисковики ( то что в id 1 записано в теме )
А тут все сайты где в theme записано id = 1

то есть типа

Theme = 1
Domen all = 1

Списком?
Трудно обьяснить, может кто понял, подскажите :(

   
 
 автор: Panker   (14.05.2007 в 11:14)   письмо автору
 
   для: Panker   (10.05.2007 в 17:09)
 

не кто не знает ? :(
или обьяснил не понятно :(

   
 
 автор: Trianon   (14.05.2007 в 13:26)   письмо автору
 
   для: Panker   (10.05.2007 в 17:09)
 

Таблицы оказались несвязанными друг с другом.

напрашивается нечно вроде

Theme (id, name)
1 Поисковик
2 Магазин
3 Развлекательный портал
4 web-студия

Domain (id, name, theme_id)

1 yandex.ru 1
2 bash.org.ru 3
3 ozon.ru 2
4 softtime.ru 4


SELECT Domain.*, Theme.name FROM 
Domain LEFT JOIN Theme ON Domain.theme_id=Theme.id

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

А объясняете Вы как обычно. Дольше думашь над вопросом, чем над решением.

   
 
 автор: Panker   (16.05.2007 в 09:16)   письмо автору
 
   для: Trianon   (14.05.2007 в 13:26)
 


SELECT Domain.*, Theme.name FROM 
Domain LEFT JOIN Theme ON Domain.theme_id=Theme.id


Большое спасибо, тока плиз подскажите как это в php вывести :)
а то чт от оне до понимаю ) у мну раньше постраничная навигация была, там так

  $quer = "SELECT count(*) FROM Domen";
  $res = mysql_query($quer);
  $total = mysql_fetch_array($res);
  $count = $total['count(*)'];


ну и так далее, а тут постранично не надо и что то под задумался :)

   
 
 автор: Trianon   (16.05.2007 в 09:33)   письмо автору
 
   для: Panker   (16.05.2007 в 09:16)
 

Хых. http://softtime.ru/bookphp/gl12_10.php

   
 
 автор: Panker   (16.05.2007 в 10:12)   письмо автору
 
   для: Trianon   (16.05.2007 в 09:33)
 

хех :) Спасибо :)


$ath = mysql_query("SELECT Domen.*, Theme.name FROM Domen LEFT JOIN Theme ON Domen.theme=Theme.id;");
if($ath)
{
  while($author = mysql_fetch_array($ath))
  {
  echo "id = ".$author['id']."<br>";
  echo "name-theme = ".$author['name']."<br>";
  }
}
else
{
  echo "<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}


вот сделал так но:
1 Не выводит все категории а тока первую :(
2 Как под категориями вывести все домены что тносятся к данной категории?

   
 
 автор: Trianon   (16.05.2007 в 10:30)   письмо автору
 
   для: Panker   (16.05.2007 в 10:12)
 

>1 Не выводит все категории а тока первую :(
Быть не может. показывайте содержимое таблиц. Лучше - дампом.

>2 Этот запрос выводит все домены вместе с их категориями.

А Вы хотели все категории, пусть даже и пустые?
тогда несколько по-другому.
тогда нужно

SELECT Theme.*, Domen.name as DomName FROM Theme LEFT JOIN Domen ON Theme.id=Domen.theme ORDER BY theme.name 

echo $row['name'] .' -- ' .$row['DomName'] ."<br>";

P.S. mysql_fetch_array лучше заменить на mysql_fetch_assoc . Путаницы будет меньше.
P.P.S. что такое $author? Вам лениво имя придумать нормальное?

   
 
 автор: Panker   (16.05.2007 в 12:22)   письмо автору
 
   для: Trianon   (16.05.2007 в 10:30)
 

не не лениво, просто сейчас это, ну типа тестирую смотрю и так далее :)

вот сделал так как вы сказали, в обще не чего не выводит :)

$ath = mysql_query("SELECT Theme.*, Domen.name as DomName FROM Theme LEFT JOIN Domen ON Theme.id=Domen.theme ORDER BY theme.name;");
if($ath)
{
  while($author = mysql_fetch_assoc($ath))
  {
    echo $row['id'] .' -- ' .$row['name'] ."<br>";
  }
}
else
{
  echo "<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}


и что такое DomName :)

   
 
 автор: Trianon   (16.05.2007 в 12:27)   письмо автору
 
   для: Panker   (16.05.2007 в 12:22)
 

DomName - синоним Domen.name . это написано в самом начале SELECT.
Вы не ответили что такое $author - поэтому и не выводит.

   
 
 автор: Panker   (16.05.2007 в 15:34)   письмо автору
 
   для: Trianon   (16.05.2007 в 12:27)
 

простите, запутался :) Иногда сам над собой смеюсь :)

всё отлично, дериктории выводятся, темы доменов точней, пожалуйста помогите доделать, что бы ПОД одной темой выводились все домены что записаны именно в эту тему...

Пока вот что у мну есть, ну то что вы и дали :)

$Domens = mysql_query("SELECT Theme.*, Domen.name as DomName FROM Theme LEFT JOIN Domen ON Theme.id=Domen.theme ORDER BY theme.name;");
if($Domens)
{
  while($Domen = mysql_fetch_assoc($Domens))
  {
    echo $Domen['id'] .' -- ' .$Domen['name'] ."<br>";
  }
}
else
{
  echo "<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}

   
 
 автор: Trianon   (16.05.2007 в 16:24)   письмо автору
 
   для: Panker   (16.05.2007 в 15:34)
 

<?
$Domens 
mysql_query("
SELECT Theme.*, Domen.name as DomName 
  FROM Theme 
  LEFT JOIN Domen ON Theme.id=Domen.theme 
  ORDER BY theme.name
"
); 
if(
$Domens

  
$Theme ''
  while(
$Domen mysql_fetch_assoc($Domens)) 
  { 
    if(
$Theme != $Domen['name'])
         echo 
"<br>Theme: ".htmlspecialchars($Theme $Domen['name'])."<br>";
    echo 
"Domain:".$Domen['DomName'] ."<br>"
  } 

else 

  echo 
"<p><b>Error: ".mysql_error()."</b><p>"
  exit(); 
}

   
 
 автор: The J4s   (16.05.2007 в 18:34)   письмо автору
 
   для: Trianon   (16.05.2007 в 16:24)
 

Всем привет!
Я не очень понял тот код выше.
Теперь помогите плиз мне. Я делаю сайт он состоит из 1 раздела СТАТЬИ, т.к для всего остального есть форум.
В MySQL я создал 2 таблицы одна kateg -категории, с полями id_kateg - PK и name - название категории...вторая табл. stat с полями id_stat - pk, name - название статьи, text - статья, id_kateg(если как я понял правильно внешний ключ для связи с категориями, чтобы установить к какой категории принадлежит статья). Подскажите как правильно заполнять поля..т.е какими значениями в полях id_stat например и id_kateg в той же таблице stat.
И 2й вопрос: Как вывести категории на страницу, чтобы при нажатии на категорию перейти к списку статей какой-то категори ну и дальше выбрать саму статью, чтобы прочесть.
Понимаю что прошу многого, но только учусь и пока с трудом понмаю, но быстро. Если не затруднит жду ответов

   
 
 автор: mefestofel   (16.05.2007 в 20:10)   письмо автору
 
   для: The J4s   (16.05.2007 в 18:34)
 

Ответ на вопрос N1
в таблице kateg:
id_kateg - это уникальный индекс
в таблице stat:
id_stat в Вашей таблице stat - это уникальный индекс, т.е. он будет разным для каждой записи в БД. id_kateg - это индекс, который определяет принадлежность статьи к категории...
Следовательно в stat.id_kateg должно быть число из kateg.id_kateg... Оно будет определять принадлежность статьи к категории....
Вопрос N2
Пусть у Вас будет 2 файла один - выводит категории, другой статьи.
Сначала надо вывести категории на страницу из БД, при этом имя категории - это ссылка кликнув на которую пользователь получает доступ к списку статей данной категории(переходит в файл со статьями), можно сделать так, (опять же для простоты понимния) в каждой ссылке прописать пару параметр = значение в данном случае id_kateg=$id_kateg, после того как пользователь переходит на страницу со статьями, скрипт забирает индекс категории, и ищет в БД статьи которым соответствует данный индекс.

Это корявый вариант, для простоты понимания, вообще это делается в одном скрипте... более элегантно...
Если совсем туго с текстом, могу написать скрипт...

   
 
 автор: The J4s   (16.05.2007 в 20:19)   письмо автору
 
   для: mefestofel   (16.05.2007 в 20:10)
 

если вас незатруднит буду очень благодарен
для сравнения скажите какие поля и значения...например 2 скрипта Create table stati и create table kateg.
Нужен маленький пример странички вывода категорий, и странички статей в категории, дальше я сам попробую саму страницу статьи написать...чтож делать только начинаю вникать в пхп

   
 
 автор: mefestofel   (16.05.2007 в 20:26)   письмо автору
 
   для: The J4s   (16.05.2007 в 20:19)
 

>для сравнения скажите какие поля и значения...например 2 скрипта Create table stati и create table kateg.
Не понял вопрос?

   
 
 автор: The J4s   (16.05.2007 в 20:30)   письмо автору
 
   для: mefestofel   (16.05.2007 в 20:26)
 

для сравнения с моими....
я правильно создаю 2 таблицы?

CREATE TABLE kateg (
id_kateg int(10) NOT NULL auto_increment,
name text,
PRimary key и т.д

CREATE TABLE stati (
id_text int(5)NOT NULL auto_increment,
name text,
text text,
id_kateg NOT NULL,
PRIMARY KEY (id_text)
) TYPE=MyISAM;


Ладно оставим тему с таблицами помогите со скриптом

   
 
 автор: The J4s   (17.05.2007 в 15:09)   письмо автору
 
   для: The J4s   (16.05.2007 в 20:30)
 

АУУ народ

   
 
 автор: The J4s   (18.05.2007 в 13:56)   письмо автору
 
   для: mefestofel   (16.05.2007 в 20:10)
 

Все спасибо, я все понял, все сделал сам, без всяких join просто использовал where тото=тото
Один человек помог только( ппц

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования