у меня есть 7 таблиц, надо сразу вывести все позиции где login=$login; структура у всех таблиц разная PHP: $query="SELECT * from `job` WHERE login='$login'"; mysql_query($query,$link); ..... $query="SELECT * from `worker` WHERE login='$login'"; mysql_query($query,$link); ..... и т.п. всего получается 7... вопрос можно ли объединить все это под 1 mysql_query и если да, то как потом вытаскивать полученный результат?
Apple когда был одиночный запрос, я делал так: PHP: $query="SELECT * from `job` WHERE login='$login'"; $result=mysql_query($query,$link); $row = mysql_fetch_array($result); и потом из массива вытаскивал нужную мне инфу типа $password=row['password']; а если запрос будет выглядеть так: PHP: $query="(SELECT * from `job` WHERE login='$login') UNION (SELECT * from `worker` WHERE login='$login')"; $result=mysql_query($query,$link); то как мне результат то оттуда вытащить?
Apple [sql](SELECT INFO(login,password,...) AS job_info FROM `job` ORDER BY job_info) UNION (SELECT INFO(login,password,....) AS worker_info FROM `worker` ORDER BY worker_info)[/sql] правильно? но все равно не понятно как вытащить оттуда инфу... PHP: $jobresult=$result['job_info']; $jobpassword=$jobresult['password']; так?
Ну ты и намудрил, ёпт. Ты ж вроде уже не новичок и просто обязан знать о таким функциях, как var_dump. Вот и посмотри структуру возвращенного массива, будет гораздо полезней, чем я тут буду распинаться.
PHP: $login='padaboo'; $link = mysql_connect("localhost","root","") or die("Could not connect: " . mysql_error()); mysql_query("SET NAMES 'cp1251';"); mysql_query("SET CHARACTER SET 'cp1251';"); mysql_query("SET SESSION collation_connection = 'cp1251_general_ci';"); $db="sitedatabase"; mysql_select_db($db) or die("Не могу открыть $db: ".mysql_error()); $query="(SELECT INFO(id,login,spec,edu,exp,city,dop,key) AS job_info FROM `job` ORDER BY job_info WHERE login='$login') UNION (SELECT INFO(id,login,spec,edu,exp,city,dop,money,key) AS worker_info FROM `worker` ORDER BY worker_info WHERE login='$login')"; $result=mysql_query($query,$link); $row = mysql_fetch_array($result); var_dump($row); Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\test\index.php on line 13 NULL Напишите пожалуйста 1 пример как это правильно делается
в Оракле можно выбрать CUBE =) Ну, результат правда все равно будет впихан в линейное представление, да.
select job.id as id_job, job.login as login_job ... from job .... worker.id as id_work, worker.login as login_work ...... $res['id_job'] $res['login_work']
[sql](SELECT worker.id as id_worker FROM `worker` WHERE login='$login') UNION (SELECT job.id as id_job FROM `job` WHERE login='$login')[/sql] PHP: echo $row['id_worker']; echo $row['id_job']; результат ( 7 Notice: Undefined index: id_job in C:\wamp\www\test\index.php on line 14 то что до UNION находит а 2ю скобку нет...
Volt(220) т.е. я могу использовать UNION только для одной и той же таблицы или для таблиц с одинаковой структурой ? а никак нельзя объединить совершенно разные запросы?
Что делает union? Грубо говоря он приписывает результаты второй выборки к результатам первой. При каких условиях он работает? Количество выбираемых данных в обоих выборках должно быть одинаковым и типы данных соответствующих полей должны быть одинаковыми (или неявно приводимыми - не знаю как там с этим делом у MySQL). Т.е. запросы: [sql]select intField, varcharField from tabel union select varcharF, intF from anotherTabel; select field from tab union select f1, f2 from table;[/sql] неверны. Запрос: [sql]select intField, varcharField from tabel1 union select intF, varcharF from anotherTabel;[/sql] при [sql]create table table1( intField int, varcharField varchar(30)); create table anotherTable( intF int, varcharF varchar(30)); insert into table1(intField, varcharField) values (5, 'tt'); insert into antherTable(intF, varcharF) values (428, 'aa'); [/sql] должен сработать. Кстати, что он вернет?
intField=5 и varcharField = aa тогда по идее или так aatt 433 а так создал таблицы PHP: $query="((select * from `tabel1` intField, varcharField ) union (select * from `anotherTabel` intF, varcharF ))"; $result=mysql_query($query,$link); $row = mysql_fetch_array($result); echo var_dump($row); Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\test\index.php on line 14 NULL PHP: $query="select intField, varcharField from tabel1 union select intF, varcharF from anotherTabel"; так тожесамое
Padaboo ты что вообще, ты запросы обычные писать умеешь? select А ТУТ ПОЛЯ ОДИНАКОВЫЕ from t1 union select И ТУТ ОДИНКОВЫЕ form t2
Нет. Он вернет: Код (Text): intField | varcharField ----------------------- 5 | tt 428 | aa И да там названия таблиц при создании и в запросе перепутаны немного: anotherTable - anotherTabel. Тоже и с другой таблицей. Вообще и сам мог бы заметить... =)