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

Форум MySQL

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

 

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

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

тема: Двухтабличный запрос
 
 автор: cerf000   (30.05.2009 в 16:39)   письмо автору
 
 

Есть две таблицы в базе T1 и T2 в таблице Т2 есть строка cat
Мне необходимо создать страницу на которой выводилось бы

Первая строка из T1
Все строки с значением 1 строки cat из Т2
Вторая строка из Т1
Все строки с значением 2 строки cat из T2
И Т.Д. …

Я достаточно недавно занимаюсь php и буду благодарен даже информации хоть как такое называется и в каком месте искать ответ.

  Ответить  
 
 автор: Trianon   (30.05.2009 в 16:52)   письмо автору
 
   для: cerf000   (30.05.2009 в 16:39)
 

начать с того, что
1) в таблицах БД нет первых , вторых и последних строк. Все строки лежат внавал.
2) в таблицах нет именованных строк. Есть именованные столбцы. Так что строка cat - наверное вовсе не строка. А столбец.

  Ответить  
 
 автор: cerf000   (30.05.2009 в 17:00)   письмо автору
 
   для: Trianon   (30.05.2009 в 16:52)
 

1) Ну пусть в навал задать id в таблице я умею
2) Все верно я имел ввиду столбец

  Ответить  
 
 автор: Yuri   (30.05.2009 в 16:57)   письмо автору
 
   для: cerf000   (30.05.2009 в 16:39)
 

Вообще то Вам в MySql. И скорее всего не строки cat из T2, а ячейки..
Вам это одним запросом нужно?

  Ответить  
 
 автор: cerf000   (30.05.2009 в 17:04)   письмо автору
 
   для: Yuri   (30.05.2009 в 16:57)
 

Один и ли несколько не так важно. У меня это получается только каждый раз обращаясь занова к таблице а уж это очень много получается :(

  Ответить  
 
 автор: Trianon   (30.05.2009 в 17:13)   письмо автору
 
   для: cerf000   (30.05.2009 в 17:04)
 

Один запрос.
SELECT t1.*, t2.* 
  FROM t1 
    LEFT JOIN t2 ON t1.id = t2.cat 
    ORDER BY t1.id


Вывод столбцов таблицы t1 , само собой, нужно будет выполнять только при смене t1.id

  Ответить  
 
 автор: cerf000   (30.05.2009 в 17:14)   письмо автору
 
   для: Trianon   (30.05.2009 в 17:13)
 

Спасибо пойду пробывать :)

  Ответить  
 
 автор: Yuri   (30.05.2009 в 17:15)   письмо автору
 
   для: cerf000   (30.05.2009 в 17:04)
 

Сколько строк из T1 предпологается к выводу?.. и вообще хоть образно поясните что должно получиться..

  Ответить  
 
 автор: cerf000   (30.05.2009 в 17:23)   письмо автору
 
   для: Yuri   (30.05.2009 в 17:15)
 

из T1 выводим две ячейки но я думаю что если разобратся с одной со второй проблем не будет.

Пример:

(T1)Фрукты:
(T2)Яблоко
Груша
Абрикос

(T1)Обои:
(T2) В горошек
В клетучку
В крапинку
..... и т д

  Ответить  
 
 автор: Yuri   (30.05.2009 в 17:40)   письмо автору
 
   для: cerf000   (30.05.2009 в 17:23)
 


select  t1.*, t2.cat  from t1,t2 when t1.obj = t2.obj


вместо столбца odj в t2 и t1 нужно указать столбцы которые разделяет категории cat... то есть obj в t1 и obj в t2 должны быть равны...

получится что-то вроде:

1 |  фрукты | Яблоко |
2 |  фрукты | Груша    |
3 |  фрукты | Абрикос |
4 |  обои  | В горошек |
5 |  обои  | В клеточку |
6 |  обои  | В крапинку |


вариант запроса не идеальный :)

  Ответить  
 
 автор: cerf000   (30.05.2009 в 17:54)   письмо автору
 
   для: Yuri   (30.05.2009 в 17:40)
 

не совсем понял у меня в Т1 5 столбцов а в Т2 11 из которых один столбец отведен под cat для распределения по категориям.

Должно быть равно количество столбцов в Т1 и Т2 ? В Т1 вообще нет столбца с категорией ! тоесть это будет работать если он будет ?

  Ответить  
 
 автор: Yuri   (30.05.2009 в 18:00)   письмо автору
 
   для: cerf000   (30.05.2009 в 17:54)
 

в данном примере подразумевается, что из t1 берутся все столбцы, а из t2 только столбец cat (как просили).. укажите

select  t1.*, t2.*  from t1,t2 when t1.obj = t2.obj

будет выведено в один результат все из t1 и t2

> В Т1 вообще нет столбца с категорией ! тоесть это будет работать если он будет ?

а как вы определяете к чему относится cat ? по id?

ps. смотрите только чтоб имена столбцов не перекрывались на выходе..

  Ответить  
 
 автор: cerf000   (30.05.2009 в 18:03)   письмо автору
 
   для: Yuri   (30.05.2009 в 18:00)
 

да по id

SELECT * FROM categories WHERE id='$cat'",$db

через _GET

  Ответить  
 
 автор: Yuri   (30.05.2009 в 18:08)   письмо автору
 
   для: cerf000   (30.05.2009 в 18:03)
 

select  t1.*, t2.*  from t1,t2 when t1.id = t2.cat


имхо id очень зыбкое понятие.. хотя работать будет

  Ответить  
 
 автор: cerf000   (31.05.2009 в 19:05)   письмо автору
35.6 Кб
 
   для: Yuri   (30.05.2009 в 18:08)
 


<?
$result 
mysql_query("SELECT * FROM categories",$db);
{
$myrow mysql_fetch_array($result);
do 
{
printf ("<BR><a href='cat.php?cat=%s'>%s<BR></a>",$myrow["id"],$myrow["title"]);
echo 
$myrow['text'];
}
while (
$myrow mysql_fetch_array($result));
}
?>

выводит из таблицы categories:

[url]Фрукты [/url]
сочный, обычно съедобный, плод дерева или кустарника. Разновидностью фруктов являются также некоторые ягоды.
[url]Обои[/url]
отделочный материал для внутренних стен и иногда потолков, обычно выпускается в виде рулонов. Обои бывают на бумажной, тканевой и полимерной (виниловые и другие обои) основе.
[url]Овощи[/url]
кулинарный термин, обозначающий съедобную часть (например, плод или клубень), растения. 

Есть другая таблица в прикрепленном файле. Как мне вывести все наименования (столбец title) первой cat после "фрукты" второй cat после "обои" и третий cat после "овощи"

Все что мне советовали до этого у меня не получилось :( но можетя я не правильно объяснил :(

  Ответить  
 
 автор: Trianon   (31.05.2009 в 19:12)   письмо автору
 
   для: Yuri   (30.05.2009 в 18:08)
 

>
select  t1.*, t2.*  from t1,t2 when t1.id = t2.cat


Самым зыбким понятием здесь, очевидно, является when?

  Ответить  
 
 автор: cerf000   (31.05.2009 в 21:15)   письмо автору
 
   для: Trianon   (31.05.2009 в 19:12)
 

это место не понятно и нигде не найти ссылки на объяснения я перерыл 2 книги и яндекс а толку мало.

И еще у меня вопрос вывода этих значений! как присвоить переменную для т2

  Ответить  
 
 автор: Yuri   (31.05.2009 в 22:35)   письмо автору
 
   для: Trianon   (31.05.2009 в 19:12)
 

Посыпаю голову пеплом... конечно where... усталость
select  t1.*, t2.*  from t1,t2 where t1.id = t2.cat

  Ответить  
 
 автор: cerf000   (05.06.2009 в 02:10)   письмо автору
17.3 Кб
 
   для: Yuri   (31.05.2009 в 22:35)
 

Если ставить t1.id = t2.cat то выводит одинаковых записей столько сколько id в t2 поэтому я ставлю t1.id = t2.id


<?
$result 
mysql_query("SELECT t1.*,t2.cat FROM t1,t2 where t1.id = t2.id",$db);
{
$myrow mysql_fetch_array($result);
do 
{
printf ("<BR><a href='cat.php?cat=%s'>%s<BR></a>",$myrow["id"],$myrow["title"]);
echo 
$myrow['text'];
}
while (
$myrow mysql_fetch_array($result));
}
?>


Но проблема с самого начала была как и теперь вывести после echo $myrow['text'];
title по категориям как на картинке

  Ответить  
 
 автор: Trianon   (05.06.2009 в 08:32)   письмо автору
 
   для: cerf000   (05.06.2009 в 02:10)
 

запрос SELECT t1.*,t2.cat не получает ни одного поля кроме cat из второй таблицы.
Неоднозначность с именем можно разрешить с помощью алиаса: SELECT ..., t2.title AS t2_title, ...

  Ответить  
 
 автор: cerf000   (05.06.2009 в 14:45)   письмо автору
 
   для: Trianon   (05.06.2009 в 08:32)
 

SELECT t1.*,t2.title AS t2_title,cat FROM t1,t2 where t1.id = t2.id
вроде так должно выводить и title а как его выводить надо назначить переменную ?

  Ответить  
 
 автор: Trianon   (05.06.2009 в 18:50)   письмо автору
 
   для: cerf000   (05.06.2009 в 14:45)
 

print_r($myrow)

  Ответить  
Rambler's Top100
вверх

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