Запрос - ы к двум таблицам ( PDO )

1. AlyOha (14.01.2012 / 01:38)
Нужно достать информацию из двух таблиц.
Таблица 1
contact
в ней 2 ячейки
name | user
в name логины друзей пользователя | в user логин пользователя.
Пример таблицы contact:
name | user
Миша | Я
Степа | Я
Рита | Я
Юля | Я
Я | Миша

и таблица users,
в ней ячейки login, gender
В login логин пользователя | в gender пол пользователя.
Пример таблицы users:
login | gender
Рита | девушка
Степа | парень
Миша | парень
Юля | девушка

Мне нужно из таблицы contact вынести пользователя, моего контакта, одного, случайно, у которого в таблице users ячейка gender = девушка.
Кто напишет рабочий запрос скину денюжку на вебмани (сто рублей) и плюс в анкету.

2. AlyOha (14.01.2012 / 01:54)
Хм, даже за деньги не окажете помощь?((

3. ramzes (14.01.2012 / 02:05)
зачем из двух? твой логин и так есть, или "моего контакта" - ересь.
и плохая структура бд.
используй внешние ключи цифровые (к id родительской записи)

4. Zдешний (14.01.2012 / 02:12)
лишняя трата. составь таблицу contacts

id | name | user | gender

5. AlyOha (14.01.2012 / 08:06)
Zдешний (14 Января 2012 / 02:12)
лишняя трата. составь таблицу contacts

id | name | user | gender
users = все пользователи
contact = контакты
Если в contact добавить ячейку gender и записывать туда пол пользователя, то
если потом пользователь сменит пол, во всех ячейках менять значение??

Добавлено через 03:13 сек.
ramzes (14 Января 2012 / 02:05)
зачем из двух? твой логин и так есть, или "моего контакта" - ересь.
и плохая структура бд.
используй внешние ключи цифровые (к id родительской записи)
я бы хотел увидеть составленный запрос.)
По мере контактирования новых пользователей туда добавятся новые записи, первый пост, пример, как держится информация в бд.

6. ZloiKombat (14.01.2012 / 12:04)
$arr = array();

$my_contact = mysql_query("SELECT `name` FROM `contact` WHERE `user`='Я';");

while ($my_contacts = mysql_fetch_assoc($my_contact))
{
	$pol = mysql_query("SELECT * FROM `users` WHERE `login`='".$my_contacts['name']."';");
	
	if ($pol['gender'] == 'Девушка')
	{
		$arr[] = $my_contacts['name'];
	}
}
$arr_count = count($arr);
$arr_count -= 1;

$mt = mt_rand(0,$arr_count);

echo $arr[$mt];


7. An0nimous (14.01.2012 / 12:23)
$c=mysql_query("SELECT * FROM `contact` WHERE `user`=$user");
while($as=mysql_fetch_array($c)){
$gender=mysql_fetch_array(mysql_query("SELECT  `users` RAND(1) WHERE `login`='$as[name]' AND `gender`='Девушка'"));
$a=$as['name'];
}
echo $a;
а по хорошему лучше пользоватьзя join`aми

Добавлено через 01:37 сек.
хз мож че и намутил в скул запросе ,давно не пользовался

8. AlyOha (14.01.2012 / 12:28)
Комбат (14 Января 2012 / 12:04)
$arr = array();

$my_contact = mysql_query("SELECT `name` FROM `contact` WHERE `user`='Я';");

while ($my_contacts = mysql_fetch_assoc($my_contact))
{
	$pol = mysql_query("SELECT * FROM `users` WHERE `login`='".$my_contacts['name']."';");
	
	if ($pol['gender'] == 'Девушка')
	{
		$arr[] = $my_contacts['name'];
	}
}
$arr_count = count($arr);
$arr_count -= 1;

$mt = mt_rand(0,$arr_count);

echo $arr[$mt];
сейчас попробую, если удастся сообщу в приват.

9. An0nimous (14.01.2012 / 12:36)
8. AlyOha, мой вариант попробуй тоже если ошибки в запросе будут пиши в лс исправлю.

10. AlyOha (14.01.2012 / 12:43)
9. An0nimous, по очереди, если комбат не подскажет в чем дело использую твой вариант.. А то обоим платить не вариант..

11. ZloiKombat (14.01.2012 / 12:44)
$arr = array();

$my_contact = mysql_query("SELECT `name` FROM `contact` WHERE `user`='Я';");

while ($my_contacts = mysql_fetch_assoc($my_contact))
{
	$pol = mysql_fetch_assoc(mysql_query("SELECT `gender` FROM `users` WHERE `login`='".$my_contacts['name']."';"));
	
	if ($pol['gender'] == 'Девушка')
	{
		$arr[] = $my_contacts['name'];
	}
}
$arr_count = count($arr);
$arr_count -= 1;

$mt = mt_rand(0,$arr_count);

echo $arr[$mt];
Так точнее, пропустил mysql_fetch_assoc в коде. Щас точно рабочий

12. AlyOha (14.01.2012 / 13:04)
Пожалуйста запросы в PDO, еще нуждаюсь в помощи..

13. Саня (14.01.2012 / 16:55)
И я попробую....

<?

$q = DB :: $dbh -> query("SELECT `contacts`.*, `users`.* FROM `contacts` LEFT JOIN `users` ON `contacts`.`name`=`users`.`login` WHERE `users`.`gender` = ? AND `contacts`.`user`=? ORDER BY RAND() LIMIT 1;", array('девушка', 'Я')) -> fetchAll();

print_r($q[0]);
?>


14. AlyOha (14.01.2012 / 17:07)
13. sanzstez, не работает((
вероятно работает, но информацию на страницу не выводит((

15. Саня (14.01.2012 / 17:15)
измени в запросе все слова contacts на contact я на своих таблицах делал с другими названиями

16. AlyOha (14.01.2012 / 17:25)
15. sanzstez, да я все изменил)) не помог мне запрос((

17. An0nimous (14.01.2012 / 17:29)
$c=DB::$dbh->query("SELECT * FROM `contact` WHERE `user`=$user");
while($as=$c->fetch()){
$gender=DB::$dbh->query("SELECT `users` RAND(1) WHERE `login`='$as[name]' AND `gender`='Девушка'") -> fetchAll();
$a=$as['name'];
}
echo $a;

18. AlyOha (14.01.2012 / 18:04)
An0nimous (14 Января 2012 / 17:29)
$c=DB::$dbh->query("SELECT * FROM `contact` WHERE `user`=$user");
while($as=$c->fetch()){
$gender=DB::$dbh->query("SELECT * FROM `users` RAND(1) WHERE `login`='$as[name]' AND `gender`='Девушка'") -> fetchAll();
$a=$as['name'];
}
echo $a;
не работает(

19. Саня (14.01.2012 / 18:11)
найми кодера. и дай ему как минимум норм структуру этих таблиц или дамп

20. AlyOha (14.01.2012 / 18:20)
дамп contact
CREATE TABLE `contact` (
`contact_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`contact_user` varchar(20) NOT NULL,
`contact_name` varchar(20) NOT NULL,
PRIMARY KEY (`contact_id`),
KEY `contact_user` (`contact_user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `contact`
--

INSERT INTO `contact` VALUES
(1, 'Леха', 'Миша'),
(2, 'Леха', 'Степа'),
(3, 'Леха', 'Аня'),
(4, 'Леха', 'Оля')
и т.д.

Добавлено через 06:23 сек.
Дамп users
CREATE TABLE `users` (
`users_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`users_login` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`users_gender` varchar(7) NOT NULL,
PRIMARY KEY (`users_id`),
UNIQUE KEY `users_login` (`users_login`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `users`
--

INSERT INTO `users` VALUES
(1, 'Леха', 'парень'),
(2, 'Миша', 'парень'),
(3, 'Степа', 'парень'),
(4, 'Аня', 'девушка'),
(5, 'Оля', 'девушка')

21. An0nimous (14.01.2012 / 18:27)
20. AlyOha, а где в таблице users ячейка gender ??упс,незаметил zub

22. AlyOha (14.01.2012 / 18:33)
21. An0nimous, все на месте))

23. Саня (14.01.2012 / 18:34)
Фейспалм

24. AlyOha (14.01.2012 / 18:46)
Сделал примерный дамп, что вам не нравится? Мне реально нужна помощь... была!!!

URL: https://visavi.net/topics/28394