[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MySql запрос использованием UNION
arnold73
Помогите разобраться с кодом, для поиска по сайту сделал запрос по 2 таб. и дальше для формирования ссылки должен знать из какой таблицы какие данные получаю
вот код:
$sql = "SELECT `id`, `date` FROM `questions`
WHERE `title` LIKE '%$query%'
OR `category` LIKE '%$query%'
ORDER BY `date`

UNION ALL

SELECT `id`, `date` FROM `tutorials`
WHERE `title` LIKE '%$query%'
OR `category` LIKE '%$query%'
ORDER BY `date` ";

буду очень благодарен любым советом rolleyes.gif
GET
arnold73
1. Вообще для этого специальная ветка есть, для SQL вопросов.
2. На форуме код выделяется, чтоб его удачно можно было читать.

По теме, можно так, ввести алиасы:

$sql = "SELECT `id` AS `id1`, `date` AS `data1` FROM `questions` 
WHERE `title` LIKE '%$query%'
OR `category` LIKE '%$query%'
ORDER BY `date`

UNION ALL

SELECT `id` AS `id2`, `date` AS `data2` FROM `tutorials`
WHERE `title` LIKE '%$query%'
OR `category` LIKE '%$query%'
ORDER BY `date`"
;


тогда в массивах уже будут не id, а id1-для questions и id2 для tutorials, тоже самое с date -> date1 и date2.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
koala
arnold73, вам правильно подсказали про алиасы, но вы можете использовать вместо объединенных запросов многотабличные запросы.

_____________
Vi Veri Veniversum Vivus Vici
glock18
Совершенно даже неправильно подсказали, проверили бы хоть сперва, если не уверены.

arnold73, правильный в вашем случае вариант - добавить псевдоколонку для определения источника строки:

SELECT `id`, `date`, [b]'questions' as `type`[/b] FROM `questions`

и во второй таблице
SELECT `id`, `date`, [b]'tutorials' as `type`[/b] FROM `tutorials`
GET
Цитата
Совершенно даже неправильно подсказали, проверили бы хоть сперва, если не уверены.


Точно...:) результаты же объединятся, прошу прощения, тогда запрос будет такой:

$sql = "SELECT `id`, `date`, 'questions' AS `tab` FROM `questions` 
WHERE `title` LIKE '%$query%'
OR `category` LIKE '%$query%'
ORDER BY `date`

UNION ALL

SELECT `id`, `date, 'tutorials' AS `tab` FROM `tutorials`
WHERE `title` LIKE '%$query%'
OR `category` LIKE '%$query%'
ORDER BY `date`"
;


Тогда просто к результатам добавится еще одно значение массива `tab`, которое для первой таблицы будет=questions, а для второй tutorials.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
glock18
Цитата (ABC @ 9.07.2013 - 23:37)
результаты же объединятся, прошу прощения, тогда запрос будет такой:


вообще то я так и написал выше ведь wink.gif
GET
glock18
Да никто не сомневается в твоей гениальности компетентности.
Цитата
Точно...smile.gif результаты же объединятся, прошу прощения.


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
glock18
Цитата (ABC @ 10.07.2013 - 05:34)
glock18
Да никто не сомневается в твоей гениальности компетентности.
Цитата
Точно...smile.gif результаты же объединятся, прошу прощения.

Не понял, к чему вообще это сказано было.

В чем смысл был повторять то, что было сказано выше?
arnold73
Спасибо что откликнулись...

я и до того как задать тут вопрос пробовал конструкция 'questions' AS `tab`...
но не работает и сегодня пытаюсь делать так:

$sql = "SELECT `id`, `date`, 'questions' AS `tab` FROM `questions`
WHERE `title` LIKE '%$query%'
OR `question` LIKE '%$query%'
OR `category` LIKE '%$query%'

UNION ALL

SELECT `id`, `date`, 'tutorials' AS `tab` FROM `tutorials`
WHERE `title` LIKE '%$query%'
OR `description` LIKE '%$query%'
OR `category` LIKE '%$query%'
ORDER BY `date`";

$result = mysql_query($sql);

if (mysql_affected_rows() > 0) {
$row = mysql_fetch_assoc($result);
...
print "$row[tab]"; // везде "tutorials"
...
}

а если каждый запрос по отдельность то вызов массива "$row[tab]" меняется (questions/tutorials)
glock18
Цитата (arnold73 @ 10.07.2013 - 13:46)
но не работает и сегодня пытаюсь делать так:

оно не может не работать

Цитата (arnold73 @ 10.07.2013 - 13:46)
if (mysql_affected_rows() > 0) {
$row = mysql_fetch_assoc($result);
...
print "$row[tab]"; // везде "tutorials"
...
}

цикл где?
arnold73
ого походу нашел ошибку у меня дальше идет еще один запрос и там тоже цикл но тут забыл как то запустить в цикл... по тому и только tutorials...от первого.... спасибо большое, это было первое сообщение в чате, до этого удавалось найти ответы из вопросах других)))
Быстрый ответ:

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