Mysql Сложный (для меня) запрос.

Gfdadf

Новичок
Добрый день!
Второй день, ломаю голову:) Обьема оперативки моего мозга не хватает)
Опишу ситуацию.
Есть таблица с заказами (ненужные поля опущу)
id - ясно дело, номер заказа
nak_true - сюда вставляется "true" если к заказу прикреплялись накладные.

Накладные находятся в отдельной таблице.
id - просто порядковый номер
invoice_id - номер накладной
order_id - номер заказа, к которому относятся накладные. Заполняется при привязке накладных к тому или иному заказу

Так вот. Нужен запрос приблизительно следующего содержания.
Запросить все накладные. Запросить все заказы.
Берем номер первого заказа из таблицы заказов.
Проверяем, есть ли хоть одна накладная с order_id = номеру этого заказа. Если есть - в записи заказа пишем nak_true="true"

Зачем это нужно. Изначально не было поля nak_true в таблице заказов.
Появилась необходимость отфильтровывать заказы, в которых есть привязанные накладные и наоборот.
Добавил поле nak_true, в которое вставляется true если к заказу привязывают накладные.

П,С. Думал делать запрос от обратного. Запросить все накладные. Вытянуть из них все order_id отфильтровав от повторов и потом на основании этого как-то танцевать...

Буду благодарен за помощь.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Gfdadf, если не можешь решить это запросом - напиши скрипт на php и сделай перебором.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
1. выбор всего что есть с таблицы накладных
2. цикл по записям с апдейтом вида UPDATE table1 SET nak_true=true WHERE id=order_id(из перебора)
 

Gfdadf

Новичок
1. выбор всего что есть с таблицы накладных
2. цикл по записям с апдейтом вида UPDATE table1 SET nak_true=true WHERE id=order_id(из перебора)
Да, но получается что в таблице заказов, в один и тот же заказ будет по несколько раз перезаписывать SET nak_true=true, поскольку к одному заказу может быть привязано энное количество накладных. Скрипт то рабочий, но по "весу" он будет ого-го! Я думал может еще варианты есть?
 

Gfdadf

Новичок
1. выбор всего что есть с таблицы накладных
2. цикл по записям с апдейтом вида UPDATE table1 SET nak_true=true WHERE id=order_id(из перебора)
получается вот так?
$query = "SELECT * FROM incvoices";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
$query1 = "UPDATE zakazy SET `nak_true` = 'true' WHERE id=".$row['order_id]];
$result1= mysql_query($query1);
}
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Не надо меня спрашивать, я не экзаминатор, я указал куда копать, так копайте)
 

Hello

Новичок
не понял заклинания) можете обьяснить?
ОБНОВИТЬ таблицу orders o УСТАНОВИТЬ nak_true = 'true'
СОЕДЕНИТЬ С таблицей invoice i ГДЕ i.order_id = o.id

Символы "i" и "o" это краткие названия таблиц (alias)

В итоге обновляем те записи в таблице orders, где "есть ли хоть одна накладная с order_id = номеру этого заказа"
 

Gfdadf

Новичок
ОБНОВИТЬ таблицу orders o УСТАНОВИТЬ nak_true = 'true'
СОЕДЕНИТЬ С таблицей invoice i ГДЕ i.order_id = o.id

Символы "i" и "o" это краткие названия таблиц (alias)

В итоге обновляем те записи в таблице orders, где "есть ли хоть одна накладная с order_id = номеру этого заказа"
ОГРОМНОЕ спасибо;) Мне именно алиасы (как выяснилось) были непонятны)
я уже вродь провернул все это дело. Запустил
Код:
update zakazy set nak_true='true' where nomer in (select order_id from invoices);
 
Сверху