Автор Тема: SQL один ко многим и др., как в Перле реализ.  (Прочитано 3492 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
Всем доброго времени суток! Вот вроде и дошел как связать 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:

";
  }


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

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

Вот ещё вставил картинку, что и начал делать :)

Спасибо!

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
SQL один ко многим и др., как в Перле реализ.
« Ответ #1 : 27 Апреля 2002, 10:31:12 »
Цитировать
$sqlstatement2 = "SELECT * FROM $tablename2 ORDER BY firma_name";


Цитировать


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

в итоге:

<option value=$rowf[0]>$rowf[1]</option>

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

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

@rowf[1лучше чтобы было написано $rowf[1]
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
SQL один ко многим и др., как в Перле реализ.
« Ответ #2 : 27 Апреля 2002, 17:53:35 »
AlieN спасибо! value то я и опустил..Сейчас сделаю, ещё вопросик, как "У второй таблицы у тебя должен быть ид "?

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
SQL один ко многим и др., как в Перле реализ.
« Ответ #3 : 27 Апреля 2002, 18:08:22 »
Yuraz
1 - я таблица:
бла бла бла бла бла бла  ID-фирмы(если я правильно понял)
2 - я таблица
бла бла про фирмы id-фирмы
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
SQL один ко многим и др., как в Перле реализ.
« Ответ #4 : 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 часа подставляю.. никак не могу дойти  :(

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
SQL один ко многим и др., как в Перле реализ.
« Ответ #5 : 29 Апреля 2002, 20:06:16 »

$query
="select table1.*,table2.name from table1 left join table2 on table1.field2=table2.id";
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
SQL один ко многим и др., как в Перле реализ.
« Ответ #6 : 30 Апреля 2002, 08:16:07 »
Сделал объединенную таблицу, вроде так легче, что то с left join ещё не разобрался. Спасибо!
$sqlstatement = "SELECT * FROM $tablename, $tablename2 WHERE $tablename.client_id_country=$tablename2.country_id ORDER BY $sort";

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28