[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединение запросов
blade
Здраствуйте все!
Скажите как можно объединить 2 таких вот запроса в один ?


$myrow = mysql_query("SELECT * FROM `users` WHERE `usname` = '".$visitor."'");
$user = mysql_fetch_assoc($myrow);

$card = mysql_query("SELECT * FROM `cards` WHERE `name` = '".$user['name']."' and status = '1'");
$cards = mysql_fetch_assoc($card);


ЗЫ: Пробовал объединять но когда в таблице cards нет записей по определенному пользователю то информация по нему не извлекаеться из таблицы пользователей!

Возможно ли их объединить чтоб работало ?



Спустя 6 минут, 25 секунд (10.02.2011 - 10:20) nugle написал(а):
как то так!
$myrow = mysql_query("SELECT * FROM `users` WHERE `usname` = '".$visitor."' UNION ALL 
SELECT * FROM `cards` WHERE `name` = '"
.$user['name']."' and status = '1'");
$user = mysql_fetch_assoc($myrow)

Спустя 5 минут, 33 секунды (10.02.2011 - 10:25) blade написал(а):
А как быть с одинаковыми названиями полей в таблицах ?

Спустя 2 минуты, 34 секунды (10.02.2011 - 10:28) nugle написал(а):
гугл почитайте, это такая интересная штука!Я просто не мастер в объединении запросов!

Спустя 1 минута, 52 секунды (10.02.2011 - 10:30) blade написал(а):
Читал но так и не нашёл =(

Спустя 4 минуты, 12 секунд (10.02.2011 - 10:34) nugle написал(а):
попробуй как то так доставать $user[0]['поле'] и $user[1]['тоже поле'] (это я чисто из соображений о массивах)

Спустя 1 минута, 20 секунд (10.02.2011 - 10:35) blade написал(а):
При выполнении запроса выдает ошибку

Parse error: syntax error, unexpected T_IF in C:\Program Files\VertrigoServ\www\test\index.php on line 25

Спустя 1 минута, 44 секунды (10.02.2011 - 10:37) Michael написал(а):
SELECT u.*, c.*
FROM `users` u, `cards` c
WHERE u.usname = $name
AND u.usname = c.name
AND c.status = 1

Спустя 4 минуты (10.02.2011 - 10:41) blade написал(а):
Цитата (Michael @ 10.02.2011 - 07:37)
SELECT u.*, c.*
FROM `users` u, `cards` c
WHERE u.usname = $name
AND u.usname = c.name
AND c.status = 1

При таком выборе в случает отсутствия записей в таблице cards данные из таблицы users не извлекаються

Спустя 11 минут, 58 секунд (10.02.2011 - 10:53) Michael написал(а):
Если нужно по всем пользователям пройтись с учетом отсутствия, то LEFT JOIN используется:
SELECT u.*, c.*
FROM `users` u LEFT JOIN `cards` c
ON u.name = c.name
AND ...


пробуй в phpmyadmin на данных и смотри какую выборку возвращает, ты же сюда даже структуры таблиц не выложил, пойди догадайся чего надо.

Спустя 42 минуты, 31 секунда (10.02.2011 - 11:36) blade написал(а):
нужно выбрать все данные из 1 таблицы а из другой только данные по определенному пользователю

Спустя 3 минуты, 33 секунды (10.02.2011 - 11:39) Snus написал(а):
blade

SELECT *
FROM `users` AS dbu
LEFT JOIN `cards` AS dbc ON dbc.name = dbu.name


Если покажешь какие столбцы тебе нужно выбрать - напишу полный запрос

Спустя 58 секунд (10.02.2011 - 11:40) Snus написал(а):
А вообще Michael тебе уже дал правильный ответ. В чем проблема-то?

Спустя 11 минут, 22 секунды (10.02.2011 - 11:52) blade написал(а):
Проблема вся в том что если в таблице users есть записи но в таблице cards их нет то данные по пользователям не выбираються а выбираються только тогда когда есть записи в cards

Спустя 2 минуты, 20 секунд (10.02.2011 - 11:54) Snus написал(а):
blade
SELECT *
FROM `users` AS dbu
INNER JOIN `cards` AS dbc ON dbc.name = dbu.name

Спустя 2 минуты, 16 секунд (10.02.2011 - 11:56) blade написал(а):
Подставил но ошибка таже и мне нужно из таблицы cards выбрать dbc.name = dbu.usname но это условие неизвестное т.к мне из таблицы users нужно выбрать определенного пользователя !

$myrow = mysql_query("SELECT *
FROM `users` AS dbu
LEFT JOIN `cards` AS dbc ON dbc.name = dbu.usname"
);
$user = mysql_fetch_assoc($myrow)

Спустя 4 минуты, 13 секунд (10.02.2011 - 12:00) Snus написал(а):
blade
SELECT *
FROM `users` AS dbu
INNER JOIN `cards` AS dbc ON dbc.name = dbu.usname
WHERE dbu.usname = 'mister_dick'


Спустя 9 минут, 41 секунда (10.02.2011 - 12:10) blade написал(а):
Ошибка остается

Parse error: syntax error, unexpected T_IF in C:\Program Files\VertrigoServ\www\test\index.php on line 25

Возможно что она из-за того что в БД users 15 полей а в cards 7 ?

Спустя 4 минуты (10.02.2011 - 12:14) Snus написал(а):
blade
Покажи свой запрос как ты сделал

Спустя 1 минута, 27 секунд (10.02.2011 - 12:15) blade написал(а):
$visit = "admin";
$myrow = mysql_query("SELECT * FROM `users` AS dbu LEFT JOIN `cards` AS dbc ON dbc.name = dbu.usname WHERE dbu.usname = '".$visit."'");
$user = mysql_fetch_assoc($myrow)

Спустя 1 минута, 12 секунд (10.02.2011 - 12:17) blade написал(а):
Вот структуры таблиц. Добрался наконец до них

--
-- Структура таблицы `cards`
--

CREATE TABLE IF NOT EXISTS `cards` (
`id` int(11) NOT NULL auto_increment,
`start` int(11) NOT NULL,
`plan` int(11) NOT NULL,
`name` varchar(40) NOT NULL,
`kto` varchar(40) NOT NULL,
`status` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

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




--
-- Структура таблицы `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL auto_increment,
`usname` varchar(40) NOT NULL,
`uspass` varchar(32) NOT NULL,
`rank` int(11) NOT NULL default '0',
`email` varchar(50) NOT NULL,
`ip` varchar(15) NOT NULL,
`loginip` varchar(15) NOT NULL,
`avatars` varchar(45) NOT NULL default 'avatars/def.png',
`register` int(11) NOT NULL,
`login` int(11) NOT NULL,
`agent` varchar(32) NOT NULL,
`status` varchar(5) NOT NULL default 'user',
`сarcom` varchar(50) NOT NULL,
`winn` int(11) NOT NULL default '0',
`loss` int(11) NOT NULL default '0',
`nich` int(11) NOT NULL default '0',
`zabil` int(11) NOT NULL default '0',
`propustil` int(11) NOT NULL default '0',
`signature` text NOT NULL,
`reiting` int(11) NOT NULL default '0',
`block` tinytext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=35 ;

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


Спустя 2 минуты, 32 секунды (10.02.2011 - 12:19) Snus написал(а):
blade
У тебя ругается на незакрытое условие IF. ищи ошибку в php коде

Спустя 1 минута, 11 секунд (10.02.2011 - 12:20) blade написал(а):
вот строка на которую ругаеться

if ($visitor != "" AND $visitor != "no_name")

Спустя 34 секунды (10.02.2011 - 12:21) Snus написал(а):
blade
Вот это условие либо не закрыто, либо не открыто по-человечески smile.gif)

Спустя 4 минуты, 46 секунд (10.02.2011 - 12:26) blade написал(а):
Проверил в phpmyadmin

SELECT * FROM `users` AS dbu LEFT JOIN `cards` AS dbc ON dbc.name = dbu.usname WHERE dbu.usname = 'admin' 


все работает т.е запрос

$myrow = mysql_query("SELECT * FROM `users` AS dbu LEFT JOIN `cards` AS dbc ON dbc.name = dbu.usname WHERE dbu.usname = '{$visit}'");


выполняется! как теперь вывести значения что использовать
mysql_fetch_assoc() или myqsl_fetch_array()

и как быть с одинаковыми именами полей в users и cards есть поля с одинаковыми именами?

Спустя 2 минуты, 11 секунд (10.02.2011 - 12:28) Snus написал(а):
blade
SELECT dbu.usname AS `login`, dbc.name AS `fio`, ....


Логика ясно?

Спустя 55 секунд (10.02.2011 - 12:29) blade написал(а):
Цитата (Snus @ 10.02.2011 - 09:28)
blade
SELECT dbu.usname AS `login`, dbc.name AS `fio`, ....


Логика ясно?

да спасибо все за помощь!

Спустя 2 минуты, 18 секунд (10.02.2011 - 12:31) Snus написал(а):
blade
Не за что smile.gif Приятно видеть счастливые каменты ))
Быстрый ответ:

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