Forum Webscript.Ru

Общие => Базы данных => Тема начата: Yuraz от 26 Апреля 2002, 19:01:24

Название: SQL один ко многим и др., как в Перле реализ.
Отправлено: Yuraz от 26 Апреля 2002, 19:01:24
Всем доброго времени суток! Вот вроде и дошел как связать 2 и более таблицы. Сделал по своему, но это не то, связывать надо по ID а я просто по TXT полю, т.е. делаю так,

конектюсь, далее запрос для первой таблицы,


sub show{
$sqlstatement = "SELECT * FROM $tablename ORDER BY $sort";
$sth = $dbh->prepare($sqlstatement);
$sth->execute || die "Невозможно выполнить SQL-запрос.";
}

далее запрос для второй таблицы

sub firma
{
$sqlstatement2 = "SELECT * FROM $tablename2 ORDER BY firma_name";
$sth2 = $dbh->prepare($sqlstatement2);
$sth2->execute || die "Невозможно выполнить SQL-запрос.";
}

После чего вывожу в форму для ввода данных

sub add
  {
       &firma;
       print "

";
       print "";
       print "";
       print "";
       print "";
       print "";
       print "";
       print "";
       print "";
       print "";
       print "

Добавление товара

Имя: ";
       print "Добавить фирму";
       print "
ФИО:
Должность: Адрес:
URL: E-mail:

";
  }


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

Как сделать ввод в гл. табл. и её вывод правильно?

Вот ещё вставил картинку, что и начал делать :)
(http://www.kirov.ru/~yura/shema.gif)
Спасибо!
Название: SQL один ко многим и др., как в Перле реализ.
Отправлено: AlieN от 27 Апреля 2002, 10:31:12
Цитировать
$sqlstatement2 = "SELECT * FROM $tablename2 ORDER BY firma_name";


Цитировать


У второй таблицы у тебя должен быть ид
а в главной таблице тоже поле ид и этот ид - ссылка на ид второй таблицы

в итоге:



$rowf[0] - ID
$rowf[1] - к примеру название

PS: если включих перл с режимом предупреждений(/usr/bin/perl -w) у тебя будет куча предупреждений типа:

@rowf[1] лучше чтобы было написано $rowf[1]
Название: SQL один ко многим и др., как в Перле реализ.
Отправлено: Yuraz от 27 Апреля 2002, 17:53:35
AlieN спасибо! value то я и опустил..Сейчас сделаю, ещё вопросик, как "У второй таблицы у тебя должен быть ид "?
Название: SQL один ко многим и др., как в Перле реализ.
Отправлено: AlieN от 27 Апреля 2002, 18:08:22
Yuraz
1 - я таблица:
бла бла бла бла бла бла  ID-фирмы(если я правильно понял)
2 - я таблица
бла бла про фирмы id-фирмы
Название: SQL один ко многим и др., как в Перле реализ.
Отправлено: Yuraz от 29 Апреля 2002, 17:41:08
while (@row=$sth->fetchrow_array)
        {
        print "$row[0]\\n";
        print "$row[1]\\n";
        print "$row[2]\\n";
        }

AlieN , помоги, как вместо $row[2] вставить данные из другой таблицы. $row[2] хранит ссылку на данные в другой таблице, фактически в $row[2] записанна цифра, а во 2й табл. два столбца, ID и поле. Нужно что бы смотря какая цифра 1й табл, подставлялись данные поля 2й табл.. 3 часа подставляю.. никак не могу дойти  :(
Название: SQL один ко многим и др., как в Перле реализ.
Отправлено: AlieN от 29 Апреля 2002, 20:06:16

$query="select table1.*,table2.name from table1 left join table2 on table1.field2=table2.id";
Название: SQL один ко многим и др., как в Перле реализ.
Отправлено: Yuraz от 30 Апреля 2002, 08:16:07
Сделал объединенную таблицу, вроде так легче, что то с left join ещё не разобрался. Спасибо!
$sqlstatement = "SELECT * FROM $tablename, $tablename2 WHERE $tablename.client_id_country=$tablename2.country_id ORDER BY $sort";