съединение на таблици |
|||||
|
|||||
|
|
|||||
![]() ![]() |
Kak да извлеча информацията от тези 3 таблици в 1, и да изведа информацията/?
create table customers ( customerid int unsigned not null auto_increment primary key, name char(40) not null, address char(40) not null, city char(20) not null, state char(20), zip char(10), country char(20) not null ); create table orders ( orderid int unsigned not null auto_increment primary key, customerid int unsigned not null, amount float(6,2), date date not null, order_status char(10), ship_name char(40) not null, ship_address char(40) not null, ship_city char(20) not null, ship_state char(20), ship_zip char(10), ship_country char(20) not null ); create table order_items ( orderid int unsigned not null, numb char(13) not null, item_price float(6,2) not null, quantity tinyint unsigned not null, primary key (orderid, numb) ); Моля ви помогнете ми |
||||
|
---------------------------
Потребител от: 11.02.05 | Всички уроци от tini4ka | Всички скриптове от tini4ka |
|||||
|
|
|||||
|
|||||
|
|
|||||
![]() ![]() |
Ами може с 3 заявки към 3-те таблици, или с 1 заявка, но тя е по-трудна:
SELECT customers.*, orders.*, order_items.*..... Но както забеляза ако искаш да изпишеш полето та order_items - numb ще трябва да направиш така: order_items.numb =) Поздрави! |
||||
|
Това мнение е редактирано от zipopro на 17.08.2008 10:28
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист Винчета, болчета гайкии...! |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
Това съм направила, но нестава така
<html> <body> <?php require_once('shop'); do_html_header(); $connection = mysql_connect ("localhost", "....", "....") or die ("Не може да се осъществи връзка със сървара"); $selectdb = mysql_select_db("shop.php") or die ("Не може да се изберете базата данни"); echo "Базата данни е избрана успешно"; $query = "SELECT * FROM customers"; $query = "SELECT * FROM orders"; $query = "SELECT * FROM order_items"; $result= mysql_query($query); $num_results = mysql_num_rows($result) or die ("Заявката не може да се изпълни"); for ( $i= 0; $i <$num_results; $i++) { // obrabotka na rezultata } $row = mysql_fetch_array($result); echo '<br />Номер на артикул:'; echo stripslashes ($row ['numb']); echo '<br />Име на купувач:'; echo stripslashes ($row ['nаме']); echo '<br />Адрес:'; echo stripslashes ($row ['sddress']); do_html_footer(); ?> </body> </html> |
||||
|
Това мнение е редактирано от tini4ka на 17.08.2008 15:28
---------------------------
Потребител от: 11.02.05 | Всички уроци от tini4ka | Всички скриптове от tini4ka |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
виж както правиш с 'query'
CODE
всъщност на теб "orderid int unsigned not null," от order_items е това което аз съм си добавил, помислих че това ти е ключ... |
||||
|
Това мнение е редактирано от po_taka на 17.08.2008 12:29
---------------------------
Потребител от: 15.04.08 | Всички уроци от po_taka | Всички скриптове от po_taka http://www.tekstove.info/ дайте някви идеи кво да го права тва нещо |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
Тук :
$query = "SELECT * FROM customers"; при тов а ще се изпълнява само последанта заявка и ако искаш мулти заявка трябва да е така $query = "SELECT * FROM orders"; $query = "SELECT * FROM order_items"; $query .= "SELECT * FROM customers"; и си има специялна фунция за мулти заякви разгледаи MaxDB Функциите $query .= "SELECT * FROM orders"; $query .= "SELECT * FROM order_items"; maxdb_multi_query() за това е функция з аизпулняване на множество заявки. А ако искш да ги свържеш таблиците трябжа да зиползваш join на таблици : CODE
|
||||
|
Това мнение е редактирано от bgspace на 17.08.2008 12:34
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
Лелеее.... а ве bgspace ти знаеш ли за кво се използва .= изобщо? Тва ще създаде накрая един низ който ще изглежда така:
$query = "SELECT * FROM customersSELECT * FROM ordersSELECT * FROM order_items"; Прави се с различни имена на променливите и с отделни заявки! Т.е.: $query = mysql_query("SELECT * FROM customers"); $query2 = mysql_query("SELECT * FROM orders"); $query3 = mysql_query("SELECT * FROM order_items"); Капиш =) ? А това: http://bg.php.net/maxdb_multi_query Го прочети! това е друг вид начин за свързване към ДБ-то => трябва да прави всички заявки и конекта наново! Така че тази функция се изключва. |
||||
|
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист Винчета, болчета гайкии...! |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
zipopro нали и аз съм го направила така, но после как да изведа резултатите?
|
||||
|
---------------------------
Потребител от: 11.02.05 | Всички уроци от tini4ka | Всички скриптове от tini4ka |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
Цитат от tini4ka@17.08.2008 15:08: zipopro нали и аз съм го направила така, но после как да изведа резултатите?разгледай си тези 3 ПОРЕДНИ реда $query = "SELECT * FROM customers"; $query = "SELECT * FROM orders"; $query = "SELECT * FROM order_items"; Нещо да им куца ? А резултата изведи със while($row = mysql_fetch_array($query)){ .... } със съответната променлива на query |
||||
|
---------------------------
Потребител от: 15.04.08 | Всички уроци от po_taka | Всички скриптове от po_taka http://www.tekstove.info/ дайте някви идеи кво да го права тва нещо |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
хмм.... Не мисля така!
Забележи тук: CODE
2. Ползвай while а не: mysql_num_rows и после for! и 3. Трябва да направиш нещо такова: $query = mysql_query("SELECT * FROM customers"); /* От тук ще стане малко по-сложно дано го разбереш: ще направим да изкарва едната заявка и по нея ще изкараме и другите! while($row_1 = mysql_fetch_array($query)) { $query2 = mysql_query("SELECT * FROM orders WHER ......."); $query3 = mysql_query("SELECT * FROM order_items WHERE ........."); ........... } Защо правим така да обясня подробно! Значи като за начало не може да направим 3 while-ла и да се надяваме на нещо, понеже ще изкара един и същи резултат хиляди пъти! Грешно: CODE
require_once('shop'); ??? Но както и да е. Ако не разбереш това как да го направиш. При задаване на: $promenliva = ..... Ти задаваш нова променлива и ако направиш така: $promenliva = 'a'; $promenliva = 'b'; echo $promenliva; ще ти изкара "b"! При .= : $prom = 'a'; $prom .= 'b'; echo $prom; ще изкара "ab" това просто трябва да го разбереш. От тук може да помислиш как ще го направиш, понеже в момента кода не ми говори нищо, понеже не е правилен. Заявките не трябва да са само "SELECT * FROM orders" Понеже така ще ти изкарва всички резултати и подредбата не се знае каква ще бъде при изкарване на резултата. |
||||
|
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист Винчета, болчета гайкии...! |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
@zipopro Трябва още дос а да прочетеш за php и mysql че да разбереш за какво става на въпрос. Когато се изка да се изпълнят множество заявки на един път се изпозва тая функция и чрез нотацията се създава един низ
SELECT * FROM customers; SELECT * FROM orders; SELECT * FROM order_items; който ще се изпълнио без проблем. но трябва да има задължително ";" след всяка заявка може да си го тестваш с phpAdmin или SQLyog и други разновидности. И точно с функцият а мулти кюери ще се изпълнят всички заявки. Че ти ако не можеш да с и го направиш това си е твой проблем. Но на него му трябва д а си джойне таблиците и да си изведе всичко на един път но Да каже пича какакво отчно иска зада може д а се направи правилния join на таблиците(left,right или крос). А тея глупости дето ги пишете с 50 заявки и 50 цикъла е типично лапешка история. Цялат а работа с е прави с една заявка :CODE
|
||||
|
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
bgspace, ako не те затруднява моля те кажи ми повече за този join. В моята книга не намерих нищо.
Искам да се изведе всеки купувач, какво е поръчал, дата, и т.н. Има и данни, които в някой случаи няма да са попълнени, например ако адреса за доставка съвпада с този на който поръчва продуктите. |
||||
|
Това мнение е редактирано от tini4ka на 17.08.2008 22:20
---------------------------
Потребител от: 11.02.05 | Всички уроци от tini4ka | Всички скриптове от tini4ka |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
Погледни тук : http://it-place.net/tutorial/MySQL/dev/12/121/%CA%EE%EC%EF%EB%E5%EA%F1%ED%E8+%E7%E0%EF%E8%F2%E2%E0%ED%E8%FF+%EA%FA%EC+MySQL там @Mutatos го е обяснил доста добре. След като прочетеш този урок и имаш конктретни вапроси ще ти отговоря
|
||||
|
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
Да ти кажа не съм се интересувал от join изобщо, но щом спомена и го потърсих е наистина интересно! Другите 2 неща които са, че трябва да си пооправиш Стила на писане, понеже малко трудно разбрах Селекцията която си дал(Не че те интересува мн, но е добре да го направиш) и другото. Не видях къде във този пример:
CODE
$query = "SELECT * FROM customers;"; $query = "SELECT * FROM orders;"; $query = "SELECT * FROM order_items;"; Не съм ли прав? |
||||
|
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист Винчета, болчета гайкии...! |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
@zipopro
1. Аз стила на писане няма да си го правя. Така съм обучаван от много по-добри специалисти от тебе който са със светлини години напред в програмирането от тебе и мене. Трябва да спазвам такъв стил на писане, че да може да бъде четим от всички служители с които работя. А не всеки да се чуде това или онова от акде идва. Ти трябва да се научеш да четеш кода. CODE
Просто формата в която се пише описанието на темата не може да форматира както трябва. .2. За трите заявки не си прав отново. Вземи и се поразрови както за join така и как е организирана компютърната памет и организация на данните в паметта. Търси за (steck and heap). Защото в момента ще се изведе само последната заявка. Но ако изпозваш нотация ще изведе и трите заявки. |
||||
|
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace |
|||||
|
|
|||||
|
|
|||||
![]() ![]() |
Прочетох и мисля . че нито CROSS JOIN,защото не искам да правя такива комбинации, нито INNER JOIN ми върши работа, остава LEFT.
Искам първо да се изведе numb , item_price, quantity, ( от order_items ) amount, date , ( от orders) и после за всеки купувач да се изведе name, address,city, state, zip,country (ot customers) i ship_name ,ship_address,ship_city , ship_state,ship_zip,ship_country,( ot orders ) ako gi nqma vuvedeno za poslednite 6, da izvede null, Възможно ли е. Аз нещо немога да го схвана още. |
||||
|
---------------------------
Потребител от: 11.02.05 | Всички уроци от tini4ka | Всички скриптове от tini4ka |
|||||
|
|
|||||
| 1 посетител чете тази тема (0 потребители и 1 гост) | |||
|
Активни потребители:
---
|
|||
| |||














Този отговор е маркиран като удовлетворителен!