Две таблицы и выборка с условием из них.

nixsoid

Новичок
Две таблицы и выборка с условием из них.

Есть таблица товаров 'tab1':

| id1 | des1 | qty1 |

и 'tab2':

| id2 | des2 | qty2 | date | oldid |

Некоторые товары из 'tab1' скопированы в 'tab2' и их id из 'tab1' унаследованы в поле 'oldid'.

Но тепер надо вывести данные таблицы 'tab1' но с условием:

дается 'год-месяц-число' (vardate) и после этого года надо взять данные из 'tab2' с датой большей по значению данными 'date' и сравнить по совпадабщему 'oldid' с 'id1' и сложит только те 'qty1+qty2' которые эти id одинаковые. Я сделал так:
PHP:
$sql   = "SELECT * FROM tab1 where id1 !=0 ";
$result = @mysql_query($sql,$db);
for   ($f = 0; $f < @mysql_num_rows($result); $f++) {
      $id1= @mysql_result($result, $f, "id1");
      $des1= @mysql_result($result, $f, "des1");
      $qty1= @mysql_result($result, $f, "qty1");

$sql33   = "SELECT * FROM tab2 where date > '$vardate' ";
$result33 = @mysql_query($sql33,$db);

while   ($res= mysql_fetch_array($result33)) {
if ($id1== $res['oldid'])   {

$newqty=($res['qty2']+$qty1); 

echo "$id1 - $des1 - $newqty <br>";
}
else
{
echo "$id1 - $des1 - $qty1 <br>";
}
}
}
Просто он так одну строчку несколько раз выводит а как сделать что бы из таблицы 'tab1' что бы как есть выводил просто те строки которые совпадают по условием со строками из 'tab2' у них 'qty' слагались?
 

uliss

Новичок
SELECT qty1 + qty2 from tab1, tab2 WHERE date > $vardate AND oldid=id1

так? зачем в цикле это делать?
 

nixsoid

Новичок
Автор оригинала: uliss
SELECT qty1 + qty2 from tab1, tab2 WHERE date > $vardate AND oldid=id1

так? зачем в цикле это делать?
нет так он только выведет те результаты которые совпадают то есть tab2 с tab1 а мне надо все выводил из tab1 а потом которые совпадает по id их qty он складывал. То есть складывал те которые совпадают а выводит что-бы всё выводил из tab1 .
 

alexhemp

Новичок
Изучайте синтаксис SQL

Вам видимо нужен LEFT JOIN с группировкой.
 

uliss

Новичок
SELECT IF(IFNULL(oldid, NULL), qty1, qty1+qty2 ) as f
FROM tab1
LEFT JOIN tab2 ON id=oldid

Если правильно понял - должно быть так.

А вообще, смотри синтаксис IF
 
Сверху