Автор Тема: Запис на еднаква стойност от една таблица в друга  (Прочетена 2378 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

viktor5

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 39
Здравейте,  :)

Възможно ли е по някакъв начин да се направи следното:

БД  таблица-1
Код: MySQL
  1. `id`
  2. `ime`
  3. `telefon` (! тук има число)


БД  таблица-2
Код: MySQL
  1. `id`
  2. `ime`
  3. `telefon`(??? тук да запише същото число от таблица-1)
  4. `adres`
  5. `grad`


Правя запис в таблица-2 чрез форма  <select><option>
(Потребителя избира името от падащо меню (името е `ime`от таблица-1))

Въпроса е - Как може когато потребителя избере името - към записа в таблица-2 автоматично да се добави и числото от `telefon` от таблица-1 ?


п.п Или съществува ли някакъв друг директен вариант , който автоматично да взима числото `telefon` от таблица-1 и да го записва в таблица-2 към съответното id?
« Последна редакция: 04 Юли 2015, 08:28:04 от viktor5 »

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Не ти е необходимо да го правиш. За това базите данни се делят на релационни, текстови и други.  Релационните бази данни ти позволяват да създаваш връзки между отделните таблици.  След това чрез join си взимаш необходимата информация и от двете таблици.

viktor5

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 39
Благодаря. Пробвам. В моя случай нещо подобно ли би трябвало да бъде?

Код: MySQL
  1. SELECT * FROM таблица-1 INNER JOIN таблица-2 ON таблица-1.telefon = таблица-2.telefon;

Къде точно трябва да се използва този тип заявка, при извеждането в <select><option> или? Не мога да есе ориентирам и нещо не се получава


« Последна редакция: 04 Юли 2015, 18:23:03 от viktor5 »

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Пробвай заявката и ще видиш. Дай да видим кода.  Освен това те съветвам да разгледаш уроците на сайта.

viktor5

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 39
Чета и пробвам постоянно  ::) но нещо не успявам да нагодя нещата, начинаещ съм....

Цитат
Дай да видим кода

Код: PHP
  1. <form action="zapis.php" method="post" enctype="multipart/form-data">
  2. <?
  3. $result=mysql_query("select * FROM таблица-1 ");
  4. while($row=mysql_fetch_array($result)){
  5. ?>
  6. <option><?=$row['ime']?></option>
  7. <?
  8. }
  9. ?>
  10. <input type="submit" name="submit" value="submit" />
  11. </form>

Така излизат имената (от таблица-1), които потребителя трябва да си избере.
Идеята е, когато натисне Submit (записва в таблица-2) към избраното име да запише и телефона  (`telefon` от таблица-1)
(потребителя да не вижда кой е телефона, но в таблица-2 да го записва, като го взима от таблица-1)

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Каква е тази мания да се копира инфо от една таблица към друга?  Както бе казано по-горе от последният, назначен, червен админ, идеята на релационните бази е да се увели релациите (взаимоотношението) м/у таблиците без те да бъдат реорганизирани и товарени с излишна дейта. Ако е за спорта (лошо нема) можеш да ползваш Insert into комбинирайки го с select clause. За повече инфо - https://dev.mysql.com/doc/refman/5.0/en/insert-select.html

Значи в твоят пример инсърт стейтнмънта би изглеждал подобно на:
Код: SQL
  1. INSERT INTOтаблица-2 (таблица-1.id, таблица-2.telefon, NULL, NULL)
  2.   SELECT таблица-1.id, таблица-1.ime, таблица-1.telefon
  3.   FROM таблица-1 WHERE таблица-1.ime = '$_POST['ime']';
  4.  

Тук ти трябва да направиш валидация на информацията която инсъртваш. Силно препоръчвам ползването на PDO библиотеката и prepared statement. Разгледай документацията. Щом сега почваш забрави за ползването на старата mysql библиотека.В най скоро време тя шъ бъде премахната от бъдещите версии на php. Html option елемента за да му вземеш стойноста трябва да имаш value към него. Препоръчвам да изкараш id-то на потребителите към стойноста н option и по това id да инсъртнеш стойностите към базата.  Нещо подобно:

Код: PHP
  1. $result=mysql_query("select * FROM таблица-1 ");
  2. while($row=mysql_fetch_array($result)){
  3. ?>
  4. <option value=<?php echo $row['id'];?>><?=$row['ime'];?></option>
  5. <?
  6. }
  7. ?>
  8.  
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Само като допълнение на jazzman-a. Има термин в програмирането, който се казва DRY(stands for don’t repeat yourself.)  Това е още по-важно според мен в базите данни. Затова преди да започнеш каквото и да е, би било хубаво да разгледаш уроците за MySQL на сайта.

viktor5

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 39
ок, благодаря ви  ;)

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Направих ти една, примерна диаграма с връзка между отделните таблици. Това е всичко от което се нуждаеш. Питай ако има нещо неясно по нея.

ПП: Телефонният номер не е число, а стринг съставен от числа.
« Последна редакция: 05 Юли 2015, 14:51:42 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

canon4o

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 18
  • -Получени: 33
  • Публикации: 324
Jazz, тук не съм много съгласен, че връзката между 2-те таблици трябва да е N:M. За мен най-добре ще е да е 1:N, вярно че има 1 случай, когато няколко човека може да са с 1 адрес, но join-а и след това и търсене ще е малко по-лесно.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Jazz, тук не съм много съгласен, че връзката между 2-те таблици трябва да е N:M. За мен най-добре ще е да е 1:N, вярно че има 1 случай, когато няколко човека може да са с 1 адрес, но join-а и след това и търсене ще е малко по-лесно.
many to many трябва да е. Потребителите биха могли да живеят в един и същи град, на една и съща улица, в една и съща сграда и дори както каза да са на един и същ адрес. 
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html