MYSQL Заявка

hrischo

Registered
Интересувам дали има начин следното нещо да бъде постигнато с една заявка.

Таблица 1 :

user_id ( int ) | user_name ( varchar ) | ... |

Таблица 2 :

admin ( int ) | user_id ( int ) | ... |

Трябва да select-на всички полета от таблица 2,същевременно да сравня admin и user_id от таблица 2 със съответните user_id от таблица 1 и да ги изкарам техните user_name.

ето 2 примерни записа от таблиците :

INSERT INTO `Таблица 1` (`user_id`, `user_name`, `...`, `...`) VALUES
(1, 'hrischo', '***', '***'),

INSERT INTO `Таблица 2` (`...`, `admin`, `user_id`, `...`, `...`, `...`, `...`, `...`) VALUES
(***, 1, 2, '***', ***, ***, '***', ***);
 
Код:
$query = 'SELECT table1.*,table2.* FROM `table1` JOIN `table2` ON `table1`.`user_id` = `table2`.`user_id`';
$exec = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_assoc($exec);
print_r($row);

Код:
Array ( [user_id] => 1 [user_name] => hrischo [admin] => 1 )

Не съм сигурен обаче, че те разбрах точно какво искаш да направиш :) В общи линии принципа е такъв, само си нагласи полетата, в случай че не съм го дал точно както искаш.
 
Определено не си ме разбрал.
В таблица 2 записвам в две различни полета user_id на потребители( admin и user_id ).Целта ми е да изкарам техните user_name,които са записани в таблица 1.Връзката ми е чрез user_id.
 
Ето ти проверката:

Код:
$select2 = mysql_query("SELECT * FROM `table_one`");
$row_sel2 = mysql_fetch_array($select2);
$user_id = $row_sel2['user_id'];
$proverka = mysql_query("SELECT * FROM `table_two` WHERE `user_id` LIKE '$user_id'");
$row_proverka = mysql_fetch_array($proverka);
echo "Потребителксото име е ".$row_proverka['user_name'].".";
 
hisar, подчерано е, че трябва да бъде с една заявка :)

==================

Е, добре де.. Извличаш user_id, user_name от таблица 1, admin от таблица 2, като условието е user_id от таблица1 да е равно на user_id от таблица2?

Таблица1
4c8278028a36ae48.PNG


Таблица2
a91b5160e37f1db1.PNG


Код
Код:
$query = 'SELECT * FROM `table1` JOIN `table2` ON `table1`.`user_id` = `table2`.`user_id`';
$exec = mysql_query($query) or die (mysql_error());
while(list($user_id, $user_name, $admin) = $row = mysql_fetch_row($exec))
{
	printf('User ID: <strong>%s</strong><br />Username: <strong>%s</strong><br />Admin: <strong>%s</strong><br />', $user_id, $user_name, $admin);
	echo str_repeat('=', '50');
	echo '<br />';
}

Резултат
ac5127525e54413a.PNG
 
До колкото разбрах искаш да имаш две таблици, които да имат такъв вид:

*При мен ги наричам table1 и table2 и нямат други полета освен, тези които ти трябват

table1
2558.jpg


table2
2559.jpg


и искаш финален резултат от заявката да изкараме същата таблица, каквато е table2, но вместо числа да са потребителските имена на съответните хора? За моите примерни таблици резултатът трябва да е това:

2560.jpg


Ако съм те разбрал правилно трябва да join-еш два пъти таблица 1, за да се получи и ще стане по този начин.

SELECT
t1_1.user_name, t1_2.user_name
FROM
table2 as t2
LEFT OUTER JOIN
table1 as t1_1
ON
t1_1.user_id = t2.admin
LEFT OUTER JOIN
table1 as t1_2
ON
t1_2.user_id = t2.user_id
 

Back
Горе