Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: LEFT JOIN......не работает
Форумы портала PHP.SU » » Вопросы новичков » LEFT JOIN......не работает

Страниц (2): [1] 2 »
 

1. MBmusic - 18 Ноября, 2013 - 12:04:13 - перейти к сообщению
в общем простой вопрос.....

PHP:
скопировать код в буфер обмена
  1.  
  2. $query = mysql_query("SELECT * FROM order_status LEFT JOIN orders ON order_status.status = 1 AND order_status.order_id = orders.user_id");
  3.        
  4.         $row_orders = mysql_fetch_assoc($query);
  5.        
  6.         print_r('<pre>');
  7.         print_r($row_orders);
  8.         print_r('<pre>');
  9.  


почему запрос выбирает первую запись из базы? я выбираю со статусом = 1 и проверка по юзеру......а у меня эти строки начинаются со второй в таблице....
2. teddy - 18 Ноября, 2013 - 12:10:30 - перейти к сообщению
Наверное потому что бы вывести все, нужен цикл? Улыбка
3. MBmusic - 18 Ноября, 2013 - 12:12:15 - перейти к сообщению
какой цикл?) оно не правильно выбирает......при чем тут цикл......я выбираю записи где статус = 1 а оно мне выбирает всю строку со статусом = 0, то есть первую из базы...
4. teddy - 18 Ноября, 2013 - 12:29:28 - перейти к сообщению
а.. сори, я подумал что вас интересует почему выводится одна запись а не все...

MBmusic пишет:
оно не правильно выбирает

обычно разработчик неправильно выбирает а сервер отдает только то что было запрошено

проверьте получаемые данные и те что в бд внимательнее
5. MBmusic - 18 Ноября, 2013 - 12:33:52 - перейти к сообщению
та вроде все правильно......вот скрины содержимого моих таблиц
6. MBmusic - 18 Ноября, 2013 - 12:34:29 - перейти к сообщению
вот вторая таблица
7. Мелкий - 18 Ноября, 2013 - 12:40:27 - перейти к сообщению
MBmusic пишет:
AND order_status.order_id = orders.user_id

На правах пророка - несколько странно выглядит идея соответствия id юзера и id заказа. У одного пользователя может быть только один заказ?
8. imya - 18 Ноября, 2013 - 12:40:42 - перейти к сообщению
А почему именно такая связь ?
9. MBmusic - 18 Ноября, 2013 - 12:42:49 - перейти к сообщению
Мелкий да там ошибочка, там order_status.order_id = orders.id......и все же в чем ошибка? почему не правильно выбирает?)
10. Мелкий - 18 Ноября, 2013 - 12:54:57 - перейти к сообщению
SQL - декларативный язык, что написали - то и получили.
LEFT JOIN берёт всё из первой таблицы и согласно условию on ищет совпадения из второй таблицы. Если совпадения нет - будут NULL'ы. Что написано - то и получается.
where.
11. MBmusic - 18 Ноября, 2013 - 12:58:39 - перейти к сообщению
если выводить в цикле:

PHP:
скопировать код в буфер обмена
  1.  
  2.         while($row_orders = mysql_fetch_assoc($query)) {
  3.                 print_r('<pre>');
  4.                 print_r($row_orders);
  5.                 print_r('<pre>');
  6.         }
  7.  


то результат будет таков:

PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [order_id] => 1
  4.     [status] => 0
  5.     [id] =>
  6.     [user_id] =>
  7.     [order_number] =>
  8. )
  9.  
  10. (
  11.     [order_id] => 2
  12.     [status] => 1
  13.     [id] => 2
  14.     [user_id] => 2
  15.     [order_number] => 124
  16. )
  17.  


непонятно почему выводит первый массив, ведь в условии ON стоит status = 1
12. teddy - 18 Ноября, 2013 - 13:01:31 - перейти к сообщению
Уберите слово LEFT из запроса
13. MBmusic - 18 Ноября, 2013 - 13:08:29 - перейти к сообщению
зачем?) мне нужно через LEFT JOIN выбрать......я хочу разобратся вот конкретно с этим примером......
14. teddy - 18 Ноября, 2013 - 13:10:57 - перейти к сообщению
Вероятно вы не знаете как работает LEFT JOIN и как работает JOIN без LEFT в данном случае

с лефтом у вас при таком запросе без волшебства ничего не выйдет
15. MBmusic - 18 Ноября, 2013 - 13:27:26 - перейти к сообщению
чем отличается ON от WHERE, по сути это одно и то же......вот написал через WHERE и все работает как надо:

PHP:
скопировать код в буфер обмена
  1.  
  2. $query = mysql_query("SELECT * FROM order_status LEFT JOIN orders ON order_status.order_id = orders.id WHERE order_status.status = 1");
  3.  

 

Powered by ExBB FM 1.0 RC1