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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: LEFT JOIN......не работает

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
MBmusic
Отправлено: 18 Ноября, 2013 - 12:04:13
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




в общем простой вопрос.....

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 и проверка по юзеру......а у меня эти строки начинаются со второй в таблице....
 
 Top
teddy
Отправлено: 18 Ноября, 2013 - 12:10:30
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Наверное потому что бы вывести все, нужен цикл? Улыбка
 
 Top
MBmusic
Отправлено: 18 Ноября, 2013 - 12:12:15
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




какой цикл?) оно не правильно выбирает......при чем тут цикл......я выбираю записи где статус = 1 а оно мне выбирает всю строку со статусом = 0, то есть первую из базы...
 
 Top
teddy
Отправлено: 18 Ноября, 2013 - 12:29:28
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




а.. сори, я подумал что вас интересует почему выводится одна запись а не все...

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

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

проверьте получаемые данные и те что в бд внимательнее
 
 Top
MBmusic
Отправлено: 18 Ноября, 2013 - 12:33:52
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




та вроде все правильно......вот скрины содержимого моих таблиц
Прикреплено изображение (Нажмите для увеличения)
orders.JPG
 
 Top
MBmusic
Отправлено: 18 Ноября, 2013 - 12:34:29
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




вот вторая таблица
Прикреплено изображение (Нажмите для увеличения)
order_status.JPG
 
 Top
Мелкий Супермодератор
Отправлено: 18 Ноября, 2013 - 12:40:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




MBmusic пишет:
AND order_status.order_id = orders.user_id

На правах пророка - несколько странно выглядит идея соответствия id юзера и id заказа. У одного пользователя может быть только один заказ?


-----
PostgreSQL DBA
 
 Top
imya
Отправлено: 18 Ноября, 2013 - 12:40:42
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




А почему именно такая связь ?

(Отредактировано автором: 18 Ноября, 2013 - 12:41:23)



-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
MBmusic
Отправлено: 18 Ноября, 2013 - 12:42:49
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Мелкий да там ошибочка, там order_status.order_id = orders.id......и все же в чем ошибка? почему не правильно выбирает?)

(Отредактировано автором: 18 Ноября, 2013 - 12:46:09)

 
 Top
Мелкий Супермодератор
Отправлено: 18 Ноября, 2013 - 12:54:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




SQL - декларативный язык, что написали - то и получили.
LEFT JOIN берёт всё из первой таблицы и согласно условию on ищет совпадения из второй таблицы. Если совпадения нет - будут NULL'ы. Что написано - то и получается.
where.


-----
PostgreSQL DBA
 
 Top
MBmusic
Отправлено: 18 Ноября, 2013 - 12:58:39
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




если выводить в цикле:

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

(Отредактировано автором: 18 Ноября, 2013 - 12:58:55)

 
 Top
teddy
Отправлено: 18 Ноября, 2013 - 13:01:31
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Уберите слово LEFT из запроса
 
 Top
MBmusic
Отправлено: 18 Ноября, 2013 - 13:08:29
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




зачем?) мне нужно через LEFT JOIN выбрать......я хочу разобратся вот конкретно с этим примером......
 
 Top
teddy
Отправлено: 18 Ноября, 2013 - 13:10:57
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Вероятно вы не знаете как работает LEFT JOIN и как работает JOIN без LEFT в данном случае

с лефтом у вас при таком запросе без волшебства ничего не выйдет
 
 Top
MBmusic
Отправлено: 18 Ноября, 2013 - 13:27:26
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




чем отличается 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.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB