[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать выборку из двух таблиц
Chudik

<?php

$mfu = mysql_query("
SELECT *
FROM user,info
WHERE user.sex = '
$usersex'
AND info.userid = user.id
AND info.hobby = '
$fors'
AND info.hobby = '
$mysex'
"
);
?>

Таблица user информация о пользователе

Таблица info дополнительная информация о пользователе есть по несколько значений для одного пользователя.

info:

-------------------------
id_user | hobby | info
5 | 8 | for
5 | 9 | for
5 | 12 | for
5 | 8 | sex
5 | 10 | sex
-------------------------

Так вот мне требуется чтобы вот из таблицы info выбирало запись по нескольким критериям.
К примеру (AND info.hobby='$fors' + info.info='for') и (AND info.hobby='$mysex' + info.info='sex')



Спустя 15 минут, 10 секунд (23.11.2009 - 12:39) glock18 написал(а):
Вообще не понял объяснение. Наверно JOIN тебе нужен smile.gif

Спустя 24 минуты, 58 секунд (23.11.2009 - 13:04) Chudik написал(а):
Мне вывести данные нужно с одной таблицы USER но выборку делать по данным из другой INFO.

Пример:
Пользователь Вася с города Москва - эти данные хтранятся в USER

Вася хочет:
яблоки - кушать
хлеб - кушать
молоко - пить
воду - пить
- эти данные хранятся в таблице INFO (id_user | hobby | info) где (Вася | яблоки | кушать)

Как выбрать мне Васю из таблицы USER, если мне нужен человек из Москвы который кушает хлеб и пьет молоко?

Если Вася молоко не пьет (нет такой записи в таблице), то мне тогда этот Вася не нужен.

Вроде будет так понятней

Спустя 40 минут, 57 секунд (23.11.2009 - 13:45) glock18 написал(а):
Ну да, JOIN. У тебя есть id_user в info. джойнь по нему, да и все. ну и условия укажи свои. про молоко которые smile.gif

Спустя 1 час, 32 минуты, 30 секунд (23.11.2009 - 15:17) Chudik написал(а):
$mfu=mysql_query("
SELECT *
FROM user AS u
JOIN info AS in
ON in.userid=u.id
AND in.hobby='яблоки'
AND in.info='кушать'
WHERE u.city='Москва'
"
);

Вот так Васю с яблоками находит, но если добавить еще раз JOIN c другим условием, выдает ошибку.
Делал вот так:
$mfu=mysql_query("
SELECT *
FROM user AS u
JOIN info AS in
ON in.userid=u.id
AND in.hobby='яблоки'
AND in.info='кушать'
JOIN info AS inf
ON inf.userid=u.id
AND inf.hobby='молоко'
AND inf.info='пить'
WHERE u.city='Москва'
"
);


Второй пример не раотает, а мне нужно чтобы выбирал по двум условиям, вот почитал про JOIN, поидее он может объединять одну таблице саме на себя несколько раз. Но не фурычит.

Спустя 2 часа, 16 минут, 29 секунд (23.11.2009 - 17:33) Krevedko написал(а):
Цитата
Пользователь Вася


улыбнуло )
Глок тебе поможет wink.gif

Зы Вообще не понял зачем второй раз джоин

Спустя 2 минуты, 59 секунд (23.11.2009 - 17:36) Krevedko написал(а):
SELECT *
FROM user AS u
JOIN info AS in
ON in.userid=u.id
AND in.hobby='яблоки' OR inf.hobby='молоко'
AND in.info='кушать' OR inf.info='пить'
WHERE u.city='Москва'
");

может как-то так ? или я не понял задачи

Спустя 3 минуты, 10 секунд (23.11.2009 - 17:40) DedMorozzz написал(а):
JOIN - соединяет 2 таблицы. если необходимо соединить 3 таблицы, только тогда 2й раз джоин использовать. А у тебя всего 2 таблицы.

Спустя 2 минуты, 3 секунды (23.11.2009 - 17:42) Krevedko написал(а):
вот-вот

Спустя 16 минут, 22 секунды (23.11.2009 - 17:58) Chudik написал(а):
Две таблицы, но во второй таблице нужно выбрать ИД_ЮЗЕРА по двум условиям. ID_PRODUKTA='$produkt' AND chtosnimdelat='пить' и второе тоже самое ID_PRODUKTA='$produkt2' AND chtosnimdelat='кушать'

И есще интересно то что $produkt и $produkt2 могут иметь одинаковые значения, разнича только в том что с ними делать пить или кушать

Спустя 1 минута, 32 секунды (23.11.2009 - 18:00) Chudik написал(а):
Так есть с этим какое то решение, или делить таблицу на две?

Спустя 4 минуты, 20 секунд (23.11.2009 - 18:04) stepan написал(а):
Chudik вообще если тебе нужно всего навсего объединить две таблице и произвести выборку одним запросом то лучше пользоваться запятой - так короче будет.
Цитата

INNER JOIN и , (запятая) являются семантическими эквивалентами. Оба осуществляют полное объединение используемых таблиц. Способ связывания таблиц обычно задается в условии WHERE.

я думаю запятой гораздо проще будет


<?php

$mfu = mysql_query("
SELECT `user`.*, `info`.*
FROM `user`, `info`
WHERE `user`.`sex` = '"
.mysql_real_escape_string ( $usersex )."'
AND `info`.`userid` = `user`.`id`
AND `info`.`hobby` = '"
.mysql_real_escape_string ( $fors )."'
AND `info`.`hobby` = '"
.mysql_real_escape_string ( $mysex )."'
"
);
?>

да и конечно желательно фильтровать данные прямо в запросе с помощью mysql_real_escape_string ()

Спустя 1 минута, 19 секунд (23.11.2009 - 18:05) DedMorozzz написал(а):
смотри. ты пишешь джоин, например :

SELECT a.tablaname1,b.tablaname1,c.tablename2,d.tablename2
FROM tablename1
LEFT JOIN tablename2 ON tablename1.a=tablename2.b WHERE tablename1.a>2 AND tablename2.d=5

Спустя 9 минут, 4 секунды (23.11.2009 - 18:14) Chudik написал(а):
Цитата
я думаю запятой гораздо проще будет


<?php

$mfu = mysql_query("
                    SELECT `user`.*, `info`.*
                    FROM `user`, `info`
                    WHERE `user`.`sex` = '".mysql_real_escape_string ( $usersex )."'
                    AND `info`.`userid` = `user`.`id`
                    AND `info`.`hobby` = '".mysql_real_escape_string ( $fors )."' 
                    AND `info`.`hobby` = '".mysql_real_escape_string ( $mysex )."'
                  ");
?>

да и конечно желательно фильтровать данные прямо в запросе с помощью mysql_real_escape_string ()
Мне нужно выбрать из таблицы INFO не только hobby='$fors ' и hobby='$mysex', а нужно hobby='$fors ' AND info='пить' и опять же из этой же таблицы по другому условию hobby='$mysex ' AND info='кушать', где $fors и $mysex могут иметь одинаковые значения, но по условию info='кушать' и info='пить' это совсем разные данные.

Спустя 6 минут, 9 секунд (23.11.2009 - 18:20) Chudik написал(а):
Цитата (DedMorozzz @ 23.11.2009 - 17:40)
JOIN - соединяет 2 таблицы. если необходимо соединить 3 таблицы, только тогда 2й раз джоин использовать. А у тебя всего 2 таблицы.

mysql> SELECT * FROM nomenclature AS t1 JOIN nomenclature AS t2 LEFT JOIN nomenclature AS t3 ON t1.id = t3.id AND t2.id = t1.id;
+----+-----------+----+-----------+------+-----------+
|
id | name | id | name | id | name |
+----+-----------+----+-----------+------+-----------+
|
1 | Книга | 1 | Книга | 1 | Книга |
|
2 | Табуретка | 1 | Книга | NULL | NULL |
|
3 | Карандаш | 1 | Книга | NULL | NULL |
|
1 | Книга | 2 | Табуретка | NULL | NULL |
|
2 | Табуретка | 2 | Табуретка | 2 | Табуретка |
|
3 | Карандаш | 2 | Табуретка | NULL | NULL |
|
1 | Книга | 3 | Карандаш | NULL | NULL |
|
2 | Табуретка | 3 | Карандаш | NULL | NULL |
|
3 | Карандаш | 3 | Карандаш | 3 | Карандаш |
+----+-----------+----+-----------+------+-----------+
И тут одна таблица

Спустя 1 час, 46 минут, 43 секунды (23.11.2009 - 20:07) Chudik написал(а):
В общем решения нет, придется переделывать на две таблицы.

Спустя 22 минуты, 19 секунд (23.11.2009 - 20:29) Chudik написал(а):
$mfh=mysql_query("
SELECT userid
FROM userhobby
WHERE hobby='
$fors'
AND who='hobby'
"
);
while($rfh=mysql_fetch_array($mfh))
{
$mfu=mysql_query("
SELECT * FROM userinfo AS u
JOIN userhobby AS us
ON us.userid=u.id
AND us.hobby='
$mysex'
AND us.who='seasex'
WHERE u.sex='
$yousex'
AND u.id='
$rfh[userid]'
AND u.gorod='
$citi'");
while($rfu=mysql_fetch_array($mfu)){

//данные о пользователе
}

Пожалуй отстановлюсь на этом, больше ничего в голову не пришло.

Спустя 32 минуты, 35 секунд (23.11.2009 - 21:02) Chudik написал(а):
Вот, выпил стаканчик вина и мозги прояснило, результат:

$mfu=mysql_query("
SELECT * FROM userinfo AS u
JOIN userhobby AS us
ON us.userid=u.id
AND (us.hobby='
$mysex' AND us.who='seasex')
AND (us.hobby='
$fors' AND us.who='hobby')
WHERE u.sex='
$yousex'
AND u.id='
$rfh[userid]'
AND u.gorod='
$citi'");

Вот и все, вопрос решен biggrin.gif

Спустя 1 минута, 1 секунда (23.11.2009 - 21:03) Kuliev написал(а):
Chudik
Поздравляюююю cool.gif


_____________
Пошёл старик к синему морю, стал он кликать золотую рыбку. «Error 404», - откликнулась золотая рыбка.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.