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 :: Версия для печати :: Работа с ссылками MYSQL PHP
Форумы портала PHP.SU » » Вопросы новичков » Работа с ссылками MYSQL PHP

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

1. new01 - 28 Января, 2020 - 16:01:26 - перейти к сообщению
Здравствуйте!

К примеру, у меня есть таблица mysql, где одно поле - это id записи в другой таблице, которое является ссылкой на нее (связи). Код получается следующим:

PHP:
скопировать код в буфер обмена
  1.  
  2. while($row = mysql_fetch_array($result)){
  3. $order = mysql_fetch_array(mysql_query("SELECT *  FROM `orders` WHERE `id` = '$row[order_id]'"));
  4. }
  5.  


А можно ли как-то $order получать исходя из ссылки? Какой тогда от неё смысл?
2. LIME - 28 Января, 2020 - 16:52:46 - перейти к сообщению
new01 пишет:
где одно поле - это id записи в другой таблице, которое является ссылкой на нее (связи)
- внешний ключ это называется, можно просто "ключ на таблицу"
на вот варианты со смыслом
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *  FROM `orders` WHERE `id` = (SELECT order_id FROM tbl WHERE id = 1 LIMIT 1);
  2. SELECT * FROM tbl
  3.     JOIN orders ON tbl.order_id = orders.id
  4. WHERE id = 1;
3. Vladimir Kheifets - 29 Января, 2020 - 07:10:23 - перейти к сообщению
new01 пишет:
Здравствуйте!

К примеру, у меня есть таблица mysql, где одно поле - это id записи в другой таблице, которое является ссылкой на нее (связи). Код получается следующим:

PHP:
скопировать код в буфер обмена
  1.  
  2. while($row = mysql_fetch_array($result)){
  3. $order = mysql_fetch_array(mysql_query("SELECT *  FROM `orders` WHERE `id` = '$row[order_id]'"));
  4. }
  5.  

А можно ли как-то $order получать исходя из ссылки? Какой тогда от неё смысл?


Добрый день!
Есть ещё вариант:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT orders.*  FROM tbl,orders WHERE orders.id=tbl.id AND tbl.id=1;
Удачи!
(Добавление)
LIME пишет:
на вот варианты со смыслом
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *  FROM `orders` WHERE `id` = (SELECT order_id FROM tbl WHERE id = 1 LIMIT 1);

в чём смысл LIMIT 1? м.б. несколько id = 1?
4. LIME - 29 Января, 2020 - 10:17:04 - перейти к сообщению
Vladimir Kheifets пишет:
в чём смысл LIMIT 1? м.б. несколько id = 1?
в данном случае особо нет смысла, это скорее лишний раз подчеркнул что подзапрос обязан вернуть именно одно значение
+ есть такая привычка везде писать LIMIT 1 где подразумевается одно значение во избежании будущих багов при изменениях(хотя это зависит от политики обработки ошибок) и немного оптимизации
http://www.php.su/mysql/manual/?...MIT_optimisation
просто привычка
5. LIME - 01 Февраля, 2020 - 14:04:40 - перейти к сообщению
Vladimir Kheifets "очевидное лучше неочивдного"(с)

 

Powered by ExBB FM 1.0 RC1