Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

Нова тема
съединение на таблици
Тази тема е погледната 359 пъти
Добави темата към любими | Принтирай темата | Нова тема 
Публикувано на: 17.08.2008 09:51
tini4ka
Калфа

Мнения: (22)

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
напиши eMail напиши лично съобщение виж профила на tini4ka
Публикувано на: 17.08.2008 10:27
zipopro
Майстор

Мнения: (743)

Ами може с 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 - Стара Загора - Уеб Програмист
Винчета, болчета гайкии...!
напиши eMail напиши лично съобщение виж профила на zipopro
Публикувано на: 17.08.2008 11:14
tini4ka
Калфа

Мнения: (22)

Това съм направила, но нестава така
<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
напиши eMail напиши лично съобщение виж профила на tini4ka
Публикувано на: 17.08.2008 11:59
po_taka
Ронин

Мнения: (192)

виж както правиш с 'query'


CODE
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
<?php
/*ако към "order_items" добавиш 'order_id int unsigned'
би трябвало да стане така:
*/


$query = "SELECT * FROM customers  WHERE customerid='$nqkakvatvoqpromenliva'";
while($row = mysql_fetch_array($query)){
   
$query2 = "SELECT * FROM orders WHERE customerid='$nqkakvatvoqpromenliva'";
   
while($row2 = mysql_fetch_array($query2)){
               
$id3=$row2['orderid'];
       
$query3 = "SELECT * FROM order_items WHERE order_id='$id3'";
           
while($row3 = mysql_fetch_array($query3)){
       
           
           
// obrabotka na rezultata
           
           
           
           
           
           
           
           
           
           
           
}    }    }


всъщност на теб "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/ дайте някви идеи кво да го права тва нещо
напиши eMail напиши лично съобщение виж профила на po_taka
Публикувано на: 17.08.2008 12:33
bgspace
Самурай

Мнения: (80)

Тук : 
$query = "SELECT * FROM customers";
$query = "SELECT * FROM orders";
$query = "SELECT * FROM order_items";
при  тов а ще  се изпълнява само последанта  заявка и ако искаш мулти  заявка  трябва  да  е  така 
$query .= "SELECT * FROM customers";
$query .= "SELECT * FROM orders";
$query .= "SELECT * FROM order_items";
и  си  има специялна  фунция  за  мулти заякви разгледаи MaxDB Функциите 
maxdb_multi_query()
за  това  е  функция  з аизпулняване  на множество заявки. А  ако искш да  ги  свържеш таблиците  трябжа  да  зиползваш join на таблици :    CODE
1
2
3
select c.*,o.*,oIt.* from customers as c
left 
join orders as o on (c.customerid = o.customerid)
left join  order_items as oIt on o.orderid = oIt.orderid)
Виждам, че  нямаш ограничения така, че това  трябв а д а направиш да  обениш трите  таблици но   зависи какво иксаш може  и д а ти трябва  и кросс джойн или раит  джойн.


 
Това мнение е редактирано от bgspace на 17.08.2008 12:34
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 17.08.2008 14:31
zipopro
Майстор

Мнения: (743)

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

Лелеее.... а ве 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 - Стара Загора - Уеб Програмист
Винчета, болчета гайкии...!
напиши eMail напиши лично съобщение виж профила на zipopro
Публикувано на: 17.08.2008 15:08
tini4ka
Калфа

Мнения: (22)

zipopro нали и аз съм го направила така, но после как да изведа резултатите?


 
---------------------------
Потребител от: 11.02.05 | Всички уроци от tini4ka | Всички скриптове от tini4ka
напиши eMail напиши лично съобщение виж профила на tini4ka
Публикувано на: 17.08.2008 18:23
po_taka
Ронин

Мнения: (192)

Цитат от 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/ дайте някви идеи кво да го права тва нещо
напиши eMail напиши лично съобщение виж профила на po_taka
Публикувано на: 17.08.2008 18:35
zipopro
Майстор

Мнения: (743)

хмм.... Не мисля така!
Забележи тук:
 CODE
1
2
3
4
5
6
7
8
9
10
$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
}
1. Имената на променливите да ги забелязваш?, Например че са еднакви?
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$query = mysql_query("SELECT * FROM customers");
$query2 = mysql_query("SELECT * FROM orders");
$query3 = mysql_query("SELECT * FROM order_items");

while($row_1 = mysql_fetch_array($query))
{
 while($row_2 = mysql_fetch_array($query2))
 {
  while($row_3 = mysql_fetch_array($query3))
  {
  .....
  }
 }
}
Имаш и мн други грешки като тази:
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 - Стара Загора - Уеб Програмист
Винчета, болчета гайкии...!
напиши eMail напиши лично съобщение виж профила на zipopro
Публикувано на: 17.08.2008 19:26
bgspace
Самурай

Мнения: (80)

@zipopro Трябва  още  дос а да  прочетеш за php и mysql  че  да  разбереш за  какво става  на въпрос. Когато се изка  да се изпълнят множество  заявки на един път се изпозва  тая  функция и чрез  нотацията се  създава  един  низ
SELECT * FROM customers; SELECT * FROM orders; SELECT * FROM order_items;
който  ще се  изпълнио  без  проблем. но трябва  да има задължително ";" след всяка  заявка може да си  го  тестваш с phpAdmin или SQLyog и  други  разновидности. И точно с  функцият а мулти  кюери ще се изпълнят всички заявки. Че  ти  ако  не можеш да  с и  го направиш това  си е  твой  проблем. Но  на  него   му трябва д а си джойне  таблиците  и  да  си  изведе  всичко на  един  път но Да  каже пича  какакво отчно иска  зада  може д а се  направи правилния  join  на  таблиците(left,right или крос). А  тея глупости  дето  ги пишете с  50 заявки и 50 цикъла  е  типично лапешка история. Цялат а работа  с е прави  с  една заявка  :
 CODE
1
2
3
4
5
6
7
8
9
10
11
$query="select
c.*
,o.*
,oIt.*
from customers as c
left  join orders as o on (c.customerid = o.customerid)
left join  order_items as oIt on o.orderid = oIt.orderid)
";
$result=mysql_query($query);
while(mysql_fetch_array($result)){

}
това е  цялат а работа  няма  голяма философия


 
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 17.08.2008 22:04
tini4ka
Калфа

Мнения: (22)

bgspace, ako не те затруднява моля те кажи ми повече за този  join. В моята книга не намерих нищо.
Искам да се изведе всеки купувач, какво е поръчал, дата, и т.н. Има и данни, които в някой случаи няма да са попълнени, например ако адреса за доставка съвпада с този на който поръчва продуктите.


 
Това мнение е редактирано от tini4ka на 17.08.2008 22:20
---------------------------
Потребител от: 11.02.05 | Всички уроци от tini4ka | Всички скриптове от tini4ka
напиши eMail напиши лично съобщение виж профила на tini4ka
Публикувано на: 17.08.2008 23:01
bgspace
Самурай

Мнения: (80)

Погледни   тук :  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
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 17.08.2008 23:07
zipopro
Майстор

Мнения: (743)

Да ти кажа не съм се интересувал от join изобщо, но щом спомена и го потърсих е наистина интересно! Другите 2 неща които са, че трябва да си пооправиш Стила на писане, понеже малко трудно разбрах Селекцията която си дал(Не че те интересува мн, но е добре да го направиш) и другото. Не видях къде във този пример:
CODE
1
2
3
$query = "SELECT * FROM customers";
$query = "SELECT * FROM orders";
$query = "SELECT * FROM order_items";
Има ";" СЛЕД самата заявка а не на края на реда! Правилния начин на това с ";" е:
$query = "SELECT * FROM customers;";
$query = "SELECT * FROM orders;";
$query = "SELECT * FROM order_items;";
Не съм ли прав?


 
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro

Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист
Винчета, болчета гайкии...!
напиши eMail напиши лично съобщение виж профила на zipopro
Публикувано на: 18.08.2008 00:31
bgspace
Самурай

Мнения: (80)

@zipopro
1. Аз  стила  на писане  няма да си  го правя. Така съм  обучаван от много по-добри специалисти от  тебе  който  са със  светлини  години напред  в програмирането от  тебе и мене. Трябва  да  спазвам  такъв  стил  на писане, че  да  може  да бъде  четим  от  всички служители  с  които  работя. А  не  всеки да  се  чуде  това  или онова от  акде  идва.  Ти  трябва  да се  научеш  да четеш кода.   CODE
1
2
3
4
5
6
7
8
9
10
11
$query =
 
"
  select
    c.*
    ,o.*
    ,oIt.*
  from
    customers as c
    left  join orders as o on (c.customerid = o.customerid)
    left join  order_items as oIt on o.orderid = oIt.orderid)
 
";
 
Просто  формата в  която  се пише описанието на  темата  не  може да форматира както  трябва.
.
2. За  трите  заявки  не си прав  отново. Вземи  и се  поразрови както  за join така  и как е  организирана компютърната памет и  организация  на данните  в паметта. Търси  за (steck and heap). Защото в  момента ще се изведе  само последната заявка. Но ако изпозваш нотация ще изведе  и  трите  заявки. 


 
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 18.08.2008 09:44
tini4ka
Калфа

Мнения: (22)

Прочетох и мисля . че нито 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
напиши eMail напиши лично съобщение виж профила на tini4ka
 1 посетител чете тази тема (0 потребители и 1 гост)  
Активни потребители: ---
   





IT-PLACE.NET © 2004 - 2008