Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: sql запрос объединение 3-х таблиц
 
 автор: kolobok16   (03.03.2016 в 23:05)   письмо автору
 
 

помогите пожалуйста создать запрос.
передается переменная по гету - $product_id

есть три таблици
1.
product_option из нее надо выбрать значения option_id по связке product_id = $product_id

2.
option из нее надо выбрать значения option_id по связке option_id = $option_id (из product_option) и type = image

3.
option_description из нее выбираем name по отсеянной связке option_id = $option_id (из option)

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

  Ответить  
 
 автор: KPETuH   (04.03.2016 в 10:39)   письмо автору
 
   для: kolobok16   (03.03.2016 в 23:05)
 

Типа того

SELECT 
`product_option`.`option_id` AS `option_id_prod`,
`option`.`option_id` AS `option_id_opt`,
`option_description`.`name` AS `name`
FROM `product_option`
JOIN `option` ON `option`.`option_id`=`product_option`.`option_id` AND `option`.`type`='image'
JOIN `option_description` ON `option_description`.`option_id`=`option`.`option_id`
WHERE `product_option`.`product_id`='тут ваша переменная'


Не совсем правда понятно зачем вам выводить 2 штуки
option_id

  Ответить  
 
 автор: kolobok16   (04.03.2016 в 11:57)   письмо автору
 
   для: KPETuH   (04.03.2016 в 10:39)
 

выдает ошибку

Ошибка выполнения запроса - Table 'test.product_option' doesn't exist
SELECT `product_option`.`option_id` AS `option_id_prod`, `option`.`option_id` AS `option_id_opt`, `option_description`.`name` AS `name` FROM `product_option` JOIN `option` ON `option`.`option_id`=`product_option`.`option_id` AND `option`.`type`='image' JOIN `option_description` ON `option_description`.`option_id`=`option`.`option_id` WHERE `product_option`.`product_id`='65'


option_id 2 раза выводим вот почему
таблица product_option
product_id option_id
65 13
65 14
65 16
65 18
66 15
и т.д.
выбираем то что соответствует номеру продукта

таблица option
option_id type
13 image
14 select
16 select
18 image
выбираем те что соответствуют image

таблица option_description
option_id name
13 1 категория
14 Подкатегория 1
18 2 категория

выводим то что соответствует выбранным option_id

  Ответить  
 
 автор: KPETuH   (04.03.2016 в 12:11)   письмо автору
 
   для: kolobok16   (04.03.2016 в 11:57)
 

Ну то что у вас во всех трех таблицах есть индекс
option_id
это понятно, зачем вам на выводе выводить его 2 раза не понятно.

Уберите кавычки в ='65'

  Ответить  
 
 автор: kolobok16   (04.03.2016 в 12:39)   письмо автору
 
   для: KPETuH   (04.03.2016 в 12:11)
 

убрал, таже ошибка

  Ответить  
 
 автор: KPETuH   (04.03.2016 в 12:51)   письмо автору
 
   для: kolobok16   (04.03.2016 в 12:39)
 

Ну судя по ошибке, ошибка не в запросе, а в вашей таблице, я названия таблиц и столбцов брал у вас, судя по ошибки у вас нет нужной таблицы.
У меня мой запрос, на ваших данных, работает.

  Ответить  
 
 автор: kolobok16   (04.03.2016 в 13:15)   письмо автору
 
   для: KPETuH   (04.03.2016 в 12:51)
 

спасибо, получилось.
в общем понял как многотабличный запрос делать )

  Ответить  
 
 автор: kolobok16   (05.03.2016 в 16:25)   письмо автору
 
   для: kolobok16   (04.03.2016 в 13:15)
 

еще вопросик а если мне надо из таблицы option_description вытащить все значения то как прописать ?

  Ответить  
 
 автор: Valick   (05.03.2016 в 23:19)   письмо автору
 
   для: kolobok16   (05.03.2016 в 16:25)
 

вы же поняли как делать
делайте и результат "в студию"

  Ответить  
 
 автор: kolobok16   (06.03.2016 в 01:17)   письмо автору
 
   для: Valick   (05.03.2016 в 23:19)
 

пожалуйста вам результат, конечно не шедевр я и сам понимаю, но главное работает, ну и может Valick если он такой умный оптимизирует ) а так же хотелось бы услышать ответ на вопрос по вытаскиванию всех данных, пробовал некоторые варианты но нечего не вышло, дает ошибки



<?
  $db 
mysql_connect('localhost','test','1111') or die("Не могу соединиться с MySQL.");
  
mysql_select_db('test'$db) or die("Не могу подключиться к базе.");

  
$product_id $_GET['product_id'];
  
?>
    <div id="opt_block">
   <ul id="opts">
   <?
   $num 
0;
  
$query "SELECT
`oc_product_option`.`option_id` AS `option_id_prod`,
`oc_option`.`option_id` AS `option_id_opt`
FROM `oc_product_option`
JOIN `oc_option` ON `oc_option`.`option_id`=`oc_product_option`.`option_id` AND `oc_option`.`type`='image'
WHERE `oc_product_option`.`product_id`=
$product_id ORDER BY `oc_option`.`sort_order` ASC";

    
$result mysql_query($query);
    
$num_rows mysql_num_rows($result);
         while (
$num $num_rows) {
     
$num++;  ?>
      <li id="opt<?= $num ?>" class="opt <? if ($num == '1') echo 'active';?>" onclick="funcTab(<?= $num ?>);"><?= $num ?></li>
  <?  ?>
  </ul>
   <div id="opts_content">
 <?
 $a 
'1';
  
$sql "SELECT
`oc_product_option`.`option_id` AS `option_id_prod`,
`oc_option`.`option_id` AS `option_id_val`
FROM `oc_product_option`
JOIN `oc_option` ON `oc_option`.`option_id`=`oc_product_option`.`option_id` AND `oc_option`.`type`='image'
WHERE `oc_product_option`.`product_id`=
$product_id ORDER BY `oc_option`.`sort_order` ASC";

    
$result_sql mysql_query($sql);
     while (
$value_sql mysql_fetch_array($result_sql)) {
   
$value_id$value_sql['option_id_val'];

  
$query_sql "SELECT
`oc_option_value`.`option_value_id` AS `option_value_id_op`, `image`,
`oc_option_value_description`.`name` AS `name`,
`oc_product_option_value`.`price`  AS `price`
FROM `oc_option_value`
JOIN `oc_option_value_description` ON `oc_option_value_description`.`option_id`=`oc_option_value`.`option_id` AND `oc_option_value_description`.`option_value_id`=`oc_option_value`.`option_value_id`
JOIN `oc_product_option_value` ON `oc_product_option_value`.`option_id`=`oc_option_value`.`option_id` AND `oc_product_option_value`.`option_value_id`= `oc_option_value`.`option_value_id`
WHERE `oc_option_value`.`option_id`=
$value_id";
$result_query mysql_query($query_sql);
  
$row mysql_num_rows($result_query);

 
$b='0'?>
 <div class="opt_content <? if ($a == '1') echo 'active';?>" id="opt_content<?= $a ?>">
 <table>
           <tr>
<?  $i=0;
while (
$value_query mysql_fetch_array($result_query)) {
$price number_format($value_query['price'],0'.''');  ?> <td> <?
 
echo  $value_query['name'?> <br /><div class="zoom2"> <img src="./image/<?= $value_query['image'?>" width='90' height='90'></div><br /><? if ($price '0') { echo $price?> руб.<? ?><br />
 <? $b++;
 if (
$i==2) {$i=0; echo "</tr><tr>";} else {echo "</td>"$i++;}
 if (
$b==$row) {?></tr> </table> </div><? $a++;}
  } 
?>
<? 
?>
 </div>
</div>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования