помогите составить правильный запрос к базе MySQL

программирование php MySQL базы данных

$user=do_query("SELECT SQL_NO_CACHE * FROM user WHERE clan_pers='$id' or pers_nik='$id' or p1='$id' or sity='$id'");
while($rezylt = mysql_fetch_array($user))
{
if ($id_nik != 0)
{

{
выводим с первой если нет результата во второй
}
} else {
$id_nik = $rezylt['id_nik'];
$users=do_query("SELECT SQL_NO_CACHE * FROM user_history WHERE id_nik='$id_nik' ORDER BY id DESC LIMIT 1");
while($rezylts = mysql_fetch_array($users))
{

выводим со второй таблицы
}
}
}

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

и также понимаю что запрос в запросе плохо для баз можно вытянуть по другом переписав первый SELECT но ума не приложу как правильно сделать примеров нашол много не не могу разобрать логику как правильно надо указать. Буду очень признателен за любую помощь

все чем могу отблагодарить 50 балов за лутшый ответ спасибо

Примечание:
немного не верно написал две лишних кавычк {} вывод результата с первой базы
$user=do_query("SELECT SQL_NO_CACHE * FROM user WHERE clan_pers='$id' or pers_nik='$id' or p1='$id' or sity='$id'");
while($rezylt = mysql_fetch_array($user))
{
if ($id_nik != 0)
{

выводим с первой если нет результата во второй

} else {
$id_nik = $rezylt['id_nik'];
$users=do_query("SELECT SQL_NO_CACHE * FROM user_history WHERE id_nik='$id_nik' ORDER BY id DESC LIMIT 1");
while($rezylts = mysql_fetch_array($users))
{
выводим со второй таблицы
}
}
}

так сейчас у меня

Примечание:
у обеих таблиц есть одно одинаковое поле id_nik цыфровое разница в том что в первой оно уникальные а во второй может быть несколько раз ищу записи по нику/ логину определяю id и во второй уже ищу по id вывожу последню запись 1 с таким id могу искать например по городу также определяю всех юзеров города и их ид и потом ищу всех юзеорв у сказаным ид во второй таблице смысл такой

Примечание:
а как ниже масив сделать правильно ? уже где вывод результат выборки идет

Примечание:
вроде все вышло но запрос чуть другой
SELECT * FROM user LEFT OUTER JOIN user_history ON user.id_nik = user_history.id_nik WHERE user.clan_pers='$id' or user.pers_nik='$id' or user.p1='$id' or user.sity='$id' ORDER BY user_history.id_nik

а как теперь указать чтоб с таблицы user_history брало только последнюю запись 1 ?

Примечание:
если один пользователь то условия ORDER BY id_nik DESC LIMIT 1 хватает если выборка по нику, а если выборка по другом параметру где можеть быть несколько человек то показывает лиш последнего добавленого в базу

Примечание:
GROUP BY user_history.id_nik ORDER BY user_history.id DESC

добавил заработало но ORDER BY user_history.id DESC не срабатывает выводит с первой таблицы запись а надо со второй

Примечание:
с джойнами мы получаем результат объединяющий 2 таблицы. еще раз - на выходе мы что должны получить? и совсем не уверен, что здесь нужен group by.


на выходе должны получить если записи во второй таблице нет вывести с первой если есть запись во второй а их там можеть быть около 100 то вывести последнюю добавленую

также если параметр задан не по нику а по групе проверить каждого учасника и вывести последнюю запись со второй или если там пусто то то с первой

ищераз уточню в первой таблице запись pers_nik и id_nik всегда уникальны во второй могут повторяться несколько раз вторая таблица очень большая порядка 8-10 м строк
первая около 40 к записей

Примечание:
да наверное так но без групировки он выводит все записи со второй таблицы а с групировкой только первую мнеже надо последнюю немогу никак найти решение
Ответы:
а что вообще планируется сделать, какие данные и при каких условиях получать? как таблицы связаны между собой?
ммм.
SELECT t1.id, as t1id, t2.id as t2id, t1.*, t2.*
FROM t1
LEFT JOIN t2
ON t1.id_nik = t2.nik
WHERE t1.wtf = blabla or blablabla
всмысле? как формировал так и формируй,
с джойнами мы получаем результат объединяющий 2 таблицы. еще раз - на выходе мы что должны получить? и совсем не уверен, что здесь нужен group by.
Смотри, left join берет записи с первой таблицы и дополняет их записями второй. если соответствия нет, ну тобишь для запсии из первой, не нашлось соответствия по параметрам во второй, то просто для такой строки атрибуты от второй таблицы вернутся Null


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.