SQL-заявка: SELECT... сложна релация

sizif

Registered
Здравейте!

Имам 2 таблици:

tbl_1 (id, pole)

tbl_2 (id_dd, ref_dd, pole_dd)

На всеки ред в първата таблица съответстват n-брои записи във втората като ref_dd.tbl2 = id.tbl_1

tbl_1:

1 | Ivan
2 | Dragan
3 | Petkan


tbl_2:

1 | 1 | Neshto si
2 | 1 | Drugo neshto
3 | 1 | Treto neshto
4 | 1 | Chetvyrto neshto
5 | 2 | AAAAAAA
6 | 3 | 12345
7 | 3 | 78900
8 | 2 | BBBBBBBB
9 | 3 | CCCCCCCCC

Трябва да селектирам записите в първата таблица заедно със съответстващите им редове във втората използвайки връзката: ref_dd.tbl2 = id.tbl_1

Допълнителното условие е да се селектират най-много 3 полета за даден ref_dd.

Иначе казано, селектирайки реда със запис Иван трябва да взема с него и полетата със записи Нещо си, Друго нещо, Трето нещо и така за всички полета от първата таблица.

Как би изглеждала тази заявка?

Благодаря предварително!
 
Код:
$s1=mysql_fetch_array(mysql_query("SELECT ID FROM `tbl_1` WHERE `pole`='Ivan'"));
$q2=mysql_query("SELECT * FROM `tbl_2` WHERE `ref_dd `='$s1[ID]' LIMIT 3");
while($s=mysql_fetch_array($q2)){
echo $s2[pole_dd]."<br>";
}
Спя малко ако има грешка някъде в кода надявам се ще ти извади еррор ако не като се прибера ще ти го редактирам
 
Код:
$query = mysql_query(SELECT tbl_1.*, tbl_2.* FROM  tbl_1 RIGHT JOIN tbl_2 ON ref_dd.tbl2 = id.tbl_1 WHERE `ime` = 'Ivan');

while ($row = mysql_fetch_array($query)) {

print_r($row);

}



Би трябвало да стане, ако не ще го дооправя, ако не ме изпреварят
 
SELECT * FROM tbl_1 AS a AND tbl_2 AS b WHERE a.id=b.ref_dd

С другото ще се оправиш, за извикване на полетата слагай а.именаполе за първата таблица и б. за втората.
 
Здравейте!

Благодаря за вниманието към темата, но или не съм обяснил добре или не сте прочели въпроса ми.

Нуждая се от следните операции, обединени в една заявка:

SELECT id, pole FROM tbl1 ORDER BY id DESC LIMIT $start, $broi

while($red .... rezultata)
{
SELECT id_dd, pole_dd FROM tbl2 WHERE ref_dd=$red['id'] ORDER BY id_dd ASC LIMIT 3
}


Необходимо ми е в 1 заявка. Релацията е доста по-сложна, отколкото смятате.
 
Е нали съм ти го направил на една заявка, сега ще ти добавя и ордер бъ.

SELECT * FROM tbl_1 AS a AND tbl_2 AS b WHERE a.id=b.ref_dd ORDER BY b.id_dd ASC LIMIT 3
 
здрасти sizif
мисля си по върпса и сякаш не се сещам как ще го направиш по простата причина че неможе ( поне не се сещам сега ) как да сложиш лимит до 3 само към едната таблица.
иначе ще стане нещо такова

SELECT tbl1.id, tbl1.pole. tbl2.id_dd, tbl2.pole_dd FROM tbl
LEFT JOIN tbl2 ON tbl2.ref_dd = tbl1.id
LIMIT 0,10

но така ако в таблица2 имаш 10 записа ще ти ги изкара всички. можеби варианта с двете заявки не е лош, на този етап не се сещам за друг.
успех
 
Код:
SELECT * 
FROM tbl_2 as a
INNER JOIN tbl_1 as b on a.ref_dd= b.id
WHERE ( SELECT COUNT(*) FROM tbl_2 WHERE ref_dd = a.ref_dd AND  id_dd <= a.id_dd ) <= 3
ORDER BY ref_dd
 

Back
Горе