|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
Здравствуйте. Я новичок, но тоже умею просить помощи прошу о помощи. Не пинайте не специалиста, попробую описать проблему, как я её понимаю. Есть старый сайт на перл, который из админки генерирует кучу разных нтм страниц используя БД. В базе данных имеются таблицы. Наверное сейчас я должен указать те, которые принимают участие в описываемой мною проблеме. Это таблица "girls" (15 ячеек) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 17:58 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
таблица "girl_addedinfo" (9 ячеек) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 17:59 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
таблица "photo" (8 ячеек) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:00 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
"Движек сайта" файл cgi-bin/generationprocess.cgi генерируя htm страницы, обращается к БД. Он создает страницы пользователя. Например таблица "girl" создает изначальную персональную страничку пользователей-дам, где имеются ID (шестизначный номер) - это уникальное имя в системе, к которому привязываются дальнейшие данные. Страничка пользователя выглядит как /bla-bla-bla/123456.htm Есть возможность добавлять данные о пользователе. Добавленые данные о даме, хранятся в таблице "girl_addedinfo" там её уникальный номер (тотже шестизнак) называется "GirlID". В этой таблице "girl_addedinfo" имеется поле "Info Type" куда вводится тип новой информации - то ли это имя, то ли это новый емайл, то ли это новая фотка. В поле "InfoValue" прописывается значение этой новой информации - "Наташа Иванова", или "novuy@email.com", или "ширина:высота" добавленой фотки. Эта новая добавленая информация имеет свой уникальный определитель записи (не знаю как это правильно называется) - "ID" (состоящий из 4 цифр) . То есть создается связка пользователь-добавленаяинфа 123456_1234, которая отвечает за то, что при генерации странички этого пользователя, вновь добавленная информация отображается именно в его профиле. В таблице "photo" персональный номер (тот, шестизначный) называется уже "P_Girl" (не знаю почему в разных таблицах названия разные, возможно так разработчик сделал чтоб не запутаться). А уникальный определитель фотки - "P_ID" (4 цифры), помимо этого есть ещё поле "P_Number" (цифры от 1 до 4 тк у дамы может быть до 4 её фоток). В итоге для каждой дамы сосдается связка 123456_1234_1, 123456_1234_2 и тд. для изначально (при регистрации) приложеных фоток, но путь к её фоткам на странице её профиля после генерации файлом файл cgi-bin/generationprocess.cgi имеет вид <img class='imgsc' src='/photo/thumb/girl_123456_1_1.jpg, ../girl_123456_2_1.jpg, ../girl_123456_3_1.jpg, ../girl_123456_4_1.jpg. и связка 123456_1234 для позднее добавленых фоток, при этом пути для этих позднее добавленых фоток на страничке профиля несколько иные - /addedgirl_123456_1234_1.jpg, /addedgirl_123456_1235_1.jpg, /addedgirl_123456_1236_1.jpg и тд. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:01 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
Собственно о чем прошу. Помимо персональных страничек профилей (дам), cgi-bin/generationprocess.cgi генерирует html страницу - галерею (/users-by-photo.html), на которой представлены все имеющиеся фотки всех дам по порядку. Но выводятся только фотки, которые добавлялись при регистрации. Я хочу чтобы выводились и фотки добавленые позже. Вот код из файла: open (TEMPLATE,"$PathToTemplates/check_by_photo.htm") || RaiseError ("Can't open template file $PathToTemplates/check_by_photo.htm\n"); read (TEMPLATE,$original,32768); close (TEMPLATE); $sth = $dbh->prepare("select count(*) from photo"); $sth->execute or die; @row = $sth->fetchrow_array; $maxz=$row[0]; $sth = $dbh->prepare("select P_Girl, P_Number, P_X, P_Y, name from photo left join girls on photo.P_Girl = girls.ID"); $sth->execute or die; $n=1; $nmax= int($maxz/60-0.001)+1; my $imgpatch; my $zcur=0; my $z=0; while ((@row = $sth->fetchrow_array)) { if ($zcur==0) { if ($n==1) { open (FILE,">$PathToWWW/users-by-photo.htm") || RaiseError ("Can't open file $PathToWWW/users-by-photo.htm\n"); } else { close (FILE); open (FILE,">$PathToWWW/users-by-photo/".$n.".htm") || RaiseError ("Can't open file $PathToWWW/users-by-photo/".$n.".htm\n"); } $insertion=''; $resultation=$original; } $p_girl=$row[0]; $p_number=$row[1]; $girlName = $row[4]; $insertion.= "<td><a title='$girlName' href='/girl-users/".$p_girl.".htm'><img class='imgsc' src='/photo/thumb/girl_".$p_girl."_".$p_number."_1.jpg' width='200' height='300' alt='$girlName`s photo'></a></td>\n"; $insertion.= "\n"; if ($zcur==7 || $zcur==15 || $zcur==23 || $zcur== 31 ) { $insertion.= "</tr><tr>"; $insertion.= "\n"; } $z++; $zcur++; if ($z==$maxz) {$zcur=60;} if ($zcur==60) { $resultation=~ s/__FOTOS__/$insertion/sg; $insertion="Displaying <b>".($z-$zcur+1)."</b> to <b>".$z."</b> (of <b>".$maxz."</b> new additions)"; $resultation=~ s/__TOTALCOUNT__/$insertion/sg; $insertion=""; ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:01 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
Я попытался скопировать из этого же файла код, который добавляет вновь добавленые фотки на персональную страничку дамы. Вот из этой части: #ADDED IMG $sth2 = $dbh->prepare("select ID, InfoValue from girl_addedinfo where IsApproved = 1 and GirlID = $id and InfoType = 'Photo'"); $sth2->execute or die; $insertion=''; while ((@row2 = $sth2->fetchrow_array)) { $addedInfoID = $row2[0]; $infoValue = $row2[1]; local(@size) = split (/:/,$infoValue); $picX = @size[0]; $picY = @size[1]; $insertion.="<img src='/photo/added/girl_".$id."_$addedInfoID"."_1.jpg' width='$picX' height='$picY' alt='$name`s added girl photo' border='0'>"; $insertion.="\n"; } $resultation=~ s/__addedphotos__/$insertion/sg; ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:02 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
В результате у меня вышло: open (TEMPLATE,"$PathToTemplates/check_by_photo.htm") || RaiseError ("Can't open template file $PathToTemplates/check_by_photo.htm\n"); read (TEMPLATE,$original,32768); close (TEMPLATE); $sth = $dbh->prepare("select count(*) from photo"); $sth->execute or die; @row = $sth->fetchrow_array; $maxz=$row[0]; $sth = $dbh->prepare("select P_Girl, P_Number, P_X, P_Y, name from photo left join girls on photo.P_Girl = girls.ID"); $sth->execute or die; $sth2 = $dbh->prepare("select ID, InfoValue from girl_addedinfo where IsApproved = 1 and GirlID = $id and InfoType = 'Photo'"); $sth2->execute or die; $n=1; $nmax= int($maxz/60-0.001)+1; my $imgpatch; my $zcur=0; my $z=0; while ((@row = $sth->fetchrow_array)) { if ($zcur==0) { if ($n==1) { open (FILE,">$PathToWWW/users-by-photo.htm") || RaiseError ("Can't open file $PathToWWW/users-by-photo.htm\n"); } else { close (FILE); open (FILE,">$PathToWWW/users-by-photo/".$n.".htm") || RaiseError ("Can't open file $PathToWWW/users-by-photo/".$n.".htm\n"); } $insertion=''; $resultation=$original; } $p_girl=$row[0]; $p_number=$row[1]; $girlName = $row[4]; $addedInfoID = $row2[0]; $infoValue = $row2[1]; local(@size) = split (/:/,$infoValue); $picX = @size[0]; $picY = @size[1]; $insertion.= "<td><a title='$girlName' href='/girl-users/".$p_girl.".htm'><img class='imgsc' src='/photo/thumb/girl_".$p_girl."_".$p_number."_1.jpg' width='200' height='300' alt='$girlName`s photo'> <img src='/photo/added/girl_".$id."_$addedInfoID"."_1.jpg' width='$picX' height='$picY' alt='$name`s added girl photo' border='0'> </a></td>\n"; $insertion.= "\n"; if ($zcur==7 || $zcur==15 || $zcur==23 || $zcur== 31 ) { $insertion.= "</tr><tr>"; $insertion.= "\n"; } $z++; $zcur++; if ($z==$maxz) {$zcur=60;} if ($zcur==60) { $resultation=~ s/__FOTOS__/$insertion/sg; $insertion="Displaying <b>".($z-$zcur+1)."</b> to <b>".$z."</b> (of <b>".$maxz."</b> new additions)"; $resultation=~ s/__TOTALCOUNT__/$insertion/sg; $insertion=""; ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:03 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
Но это приводит к тому, что на страничке всех имеющихся фоток (изначальных и добавленных) в адресе добавленных фоток уникальный 4значный код не отображается. Вместо него стоит пропуск. Пропуски также в свойствах (высота, ширина) добавленных позднее фоток. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:04 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
И почему-то (на картинке видно) к основной фотке профиля добавляется добавленная позднее фотка совсем другой дамы. Я подозреваю, что мне надо объединить инфу из разных таблиц методом join или split, но как такое делать, я не знаю. Простите ещё раз, если я использовал не верные термины (я вообще то врач на пенсии с забавным хобби, и сейчас допиливаю древний сайт, с которым то и связываться никто не хочет). Возможно кто-нибудь захочет помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:10 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
TL;DR Это - явно во фриланс. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 19:34 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
Простите новичка. А что означает автор TL;DR Это - явно во фриланс. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 09:39 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
beceЯ хочу чтобы выводились и фотки добавленые позже... Если я вас правильно понял, то вам надо заменить вот этот запрос: select P_Girl, P_Number, P_X, P_Y, name from photo left join girls on photo.P_Girl = girls.ID На запрос, который выводит нужную вам информацию... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:13 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
Да, я подозреваю, что мне надо как-то (как?) скомпоновать эти три таблицы, для того, чтоб из первой и третьей на страничку "все имеющиеся изображения" выводились первичные фотки (вида 123456_1_1.jpg), а из первой и второй добавлялись (если были добавления пользователем новых фоток) новые вида 123456_1234_1.jpg ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:38 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
bece, а почему денег-то не хочешь заплатить ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 19:10 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
Мне казалось эта ветка создавалась способными помочь в каком-либо вопросе. Каким образом оценить (оплатить) тут появление строчки например вида: $sth3 = $dbh->prepare("select ID, InfoValue from girl_addedinfo where IsApproved = 1 and GirlID = $id and InfoType = 'Photo' join Name from girl"); $p_girl=$row3[0]; $p_number=$row3[1]; $girlName = $row3[2]; $ID=$row3[3]; $addedInfoID = $row3[4]; Это ведь не какая-то работа. Способен помочь-отвечаешь. Жлоб-проходишь мимо. Всё просто. Или вы тут все друг дружке платите за каждый ответ (надпись)? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 21:46 |
|
Perl и Mysql выборка и нескольких таблиц.
|
|||
---|---|---|---|
#18+
beceЭто ведь не какая-то работа. "Вот вы поете, играете, а работаете вы где ?" ( записка из зала Андрею Макаревичу ) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 03:51 |
|
|
start [/forum/topic.php?fid=47&fpage=31&tid=1828985]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 149ms |
0 / 0 |