<?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 тебе нужен
Спустя 24 минуты, 58 секунд (23.11.2009 - 13:04) Chudik написал(а):
Мне вывести данные нужно с одной таблицы USER но выборку делать по данным из другой INFO.
Пример:
Пользователь Вася с города Москва - эти данные хтранятся в USER
Вася хочет:
яблоки - кушать
хлеб - кушать
молоко - пить
воду - пить
- эти данные хранятся в таблице INFO (id_user | hobby | info) где (Вася | яблоки | кушать)
Как выбрать мне Васю из таблицы USER, если мне нужен человек из Москвы который кушает хлеб и пьет молоко?
Если Вася молоко не пьет (нет такой записи в таблице), то мне тогда этот Вася не нужен.
Вроде будет так понятней
Пример:
Пользователь Вася с города Москва - эти данные хтранятся в USER
Вася хочет:
яблоки - кушать
хлеб - кушать
молоко - пить
воду - пить
- эти данные хранятся в таблице INFO (id_user | hobby | info) где (Вася | яблоки | кушать)
Как выбрать мне Васю из таблицы USER, если мне нужен человек из Москвы который кушает хлеб и пьет молоко?
Если Вася молоко не пьет (нет такой записи в таблице), то мне тогда этот Вася не нужен.
Вроде будет так понятней
Спустя 40 минут, 57 секунд (23.11.2009 - 13:45) glock18 написал(а):
Ну да, JOIN. У тебя есть id_user в info. джойнь по нему, да и все. ну и условия укажи свои. про молоко которые
Спустя 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 написал(а):
Цитата |
Пользователь Вася |
улыбнуло )
Глок тебе поможет
Зы Вообще не понял зачем второй раз джоин
Спустя 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='Москва'
");
может как-то так ? или я не понял задачи
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 могут иметь одинаковые значения, разнича только в том что с ними делать пить или кушать
И есще интересно то что $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'");
Вот и все, вопрос решен
Спустя 1 минута, 1 секунда (23.11.2009 - 21:03) Kuliev написал(а):
Chudik
Поздравляюююю
Поздравляюююю
_____________
Пошёл старик к синему морю, стал он кликать золотую рыбку. «Error 404», - откликнулась золотая рыбка.