2014-01-19 2 views
0

У меня проблема с соединением в mysql, я пытаюсь заполнить поле Name из таблицы диапазонов в поле band_name в таблице заказов, когда band_id из таблицы заказов соответствует Band_id из таблицы диапазонов. все это сбивает с толку и хотелось бы посоветовать или помочь.Mysql, соединяющий данные обмена между таблицами

мой код

<?php 
     } 

     $user = new User(); 
     $user_name = escape($user->data()->username); 

     $result = mysql_query("SELECT bands.Name FROM bands LEFT JOIN orders ON bands.Band_id = orders.band_id WHERE orders.band_id = 1 AND user_name = '"mysql_real_escape_string($user_name)"'"); 
     //$result = mysql_query("SELECT * FROM orders WHERE user_name = '".mysql_real_escape_string($user_name)."'"); 


     echo '<table border="1"> 
     <tr> 
     <th>My bookings</th> 
     <th>gig No</th> 
     </tr>'; 

     if(mysql_num_rows($result) > 0){ 
      while($row = mysql_fetch_array($result)){ 
       echo 
       "<tr> 
       <td>".$row['user_name']."</td> 
       <td>".$row['band_id']."</td> 
       </tr>"; 
      } 
     }else{ 
      echo "<tr><td>No bookings</td></tr>"; 
     } 
     echo "</table>"; 
     ?> 
+0

Пожалуйста, покажите код о том, как бы вы «поместили 122 в band_id в' orders' ». –

+0

Я бы просто использовал простую вставку – Beep

+0

Столбец user_name является неоднозначным. Он существует даже в любой из таблиц, используемых в этом запросе? – Ole

ответ

2
SELECT * FROM bands 
LEFT JOIN orders as user_orders ON(
user_orders.band_id = bands.band_id 
AND user_orders.user_name = "'.mysql_real_escape_string($user_name).'" 
) 
1

Я думаю, что Вы приближаетесь ваше использование БД немного неправильно.

Ваша таблица bands должна содержать всю необходимую информацию о группе. Такие, как это:

| id | name  | 
==================== 
| 1 | The Beatles | 
| 2 | Blur  | 
etc 

Ваша orders таблица должна содержать все или ваши данные заказа:

| id | band_id | 
================ 
| 1 | 2  | 
| 2 | 1  | 
| 3 | 1  | 

Как вы видите, есть 2 заказы на The Beatles и 1 заказ на размывание.

Вы можете получить название группы для того, например, так:

SELECT bands.name FROM orders, bands, WHERE orders.id = 1 AND orders.band_id = bands.id; 

Использование внутреннего соединения:

SELECT bands.name FROM bands INNER JOIN orders ON bands.id = orders.band_id WHERE orders.id = 1; 

Использование соединения слева:

SELECT bands.name FROM bands LEFT JOIN orders ON bands.id = orders.band_id WHERE orders.id = 1; 

UPDATE:

Ссылка на это изображение для получения более подробной информации о присоединяется:

SQL join examples

Взятые из this stack overflow question.

+0

. Исправьте синтаксис соединения, чтобы я мог подтвердить ваш ответ. –

+0

LOL, ок ... Я был ленив и старался держать вещи просто – Jon

+0

@ Спасибо спасибо, я попытаюсь использовать их, а затем принять ответ – Beep

Смежные вопросы