[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: inner join
Страницы: 1, 2
Tecvid
приветствую всех!) стоит такая задача:
надо достать данные из одной таблицы, затем в цикле достать из другой таблицы, и получится что для 10 записей например будет 11 запросов, чтобы избежать этого решил использовать join, и теперь сколько бы записей ни было запрос будет один, казалось бы всё решено, но..
нужно чтобы из первый таблицы поучить данные, а из второй количество строк, причём ещё и проверить есть ли во второй базе хоть одно поле где идентификатор публикации и идентификатор пользователя (который просматривает страницу) равны, такое осуществить реально?
Миша
Да, наверно. На выходе ты получишь все столбцы таблиц (всех или которые укажешь) остальное решается через условие WHERE.

_____________
Принимаю заказы, писать в ЛС
Tecvid
можете на примере показать? запрос у меня такой, значит прлучаем сначала гет:

$page_id = $_GET['page];
$user_id = $_SESSION['user_id'];

$sql = "SELECT * FROM table1 JOIN table2 ON table1.table1_id = table2.for_table1_id WHERE page_id=".$page_id;

$query = mysqli_query($sql);

а как дальше делать не знаю
Миша
Цитата (Tecvid @ 29.03.2015 - 08:03)
можете на примере показать? запрос у меня такой, значит прлучаем сначала гет:

$page_id = $_GET['page];
$user_id = $_SESSION['user_id'];

$sql = "SELECT * FROM table1 JOIN table2 ON table1.table1_id = table2.for_table1_id WHERE page_id=".$page_id;

$query = mysqli_query($sql);

а как дальше делать не знаю

Соединяешь две таблицы по столбцам table1_id и for_table1_id ?

Потом

$sql = "SELECT * FROM table1 JOIN table2
ON table1.table1_id = table2.for_table1_id
WHERE `page_id` = '
$page_id'";


Что дальше не знаешь?

_____________
Принимаю заказы, писать в ЛС
Tecvid
Цитата
Что дальше не знаешь?

ну раз спрашиваю smile.gif
в сгл не так уж силён, никогда не приходилось такие запросы делать
Миша
Конкретно, мы твои мысли не читаем. Таблицы, названия столбцов, что нужно сделать. wink.gif

_____________
Принимаю заказы, писать в ЛС
Tecvid
этим одним запросом:

1) из первой таблицы надо получить лишь данные
2) из второй количество строк + ещё и проверить есть ли среди этих строк где есть и id публикации (не страницы, не page_id, a post_id, который получаем в запросе) и id пользователя

вот и всё smile.gif
kaww
Названия таблиц и полей подставь свои
SELECT if(_t2.id, COUNT(*), 0) as cnt, t1.* 
FROM t1
LEFT JOIN (SELECT id, t1_id
FROM t2
WHERE pub_id='ID публикации' and user_id='ID пользователя') as _t2 on t1.id=t2.t1_id
GROUP BY t1.id

Если у тебя pub_id и t1_id - это одно и тоже (не совсем понял из первого поста структуру данных), то pub_id='ID публикации' из запроса убрать
Tecvid
я, честно говоря, ничего не понял, похоже вы меня не так поняли, и поэтому у вас запрос не соответсвует, сейчас я вам на реальном примере распишу с реальными именами:

есть таблицы:

= posts =
post_id | post_text | for_user_id

= likes =
like_id | for_post_id | from_user_id

юзер1 заходит на страницу юзер2, айди юзера1 хранится в сессии, юзера2 берется из гет, далее из таблицы posts берутся записи где for_user_id равен айди юзера2, который получили из гет, а из таблицы likes берётся количество строк, где for_post_id равен post_id первой таблицы (join on), и плюс надо проверить есть ли в таблице likes строка, где from_user_id равен айди юзера1, полученный из сессии, вопрос в том как реализовать всё это одним запросом и вывести на экран :/
Миша
$test = mysqli_real_escape_string($podkl, $_GET['test']);
1 - ...WHERE `for_user_id` = '$test'

$test2 = ''; // Ид первой таблицы
2 - ...WHERE `for_post_id` = '$test2'
mysqli_num_rows // количество строк

$test3 = 'Сессия';
3 - ...WHERE `from_user_id` = '$test3'




_____________
Принимаю заказы, писать в ЛС
Tecvid
Медведь, а это два запроса, нет? и второй уже придётся запихнуть в цикл, но я как ращ и стараюсь избегать этого

или же я что-то не так понял из предложенного вами варианта
Миша
Цитата (Tecvid @ 29.03.2015 - 10:27)
Медведь, а это два запроса, нет? и второй уже придётся запихнуть в цикл, но я как ращ и стараюсь избегать этого

или же я что-то не так понял из предложенного вами варианта

Зачем второй - в цикл? Если нужно получить количество строк, то по любому запрос надо делать отдельно, потом
- mysqli_num_rows // количество строк
- и mysqli_free_result

_____________
Принимаю заказы, писать в ЛС
Tecvid
но ведь нужно же получить к каждой публикации отдельно
Миша
Видимо нужно ещё подробнее объяснить
1 ...
2 ...
....

_____________
Принимаю заказы, писать в ЛС
Tecvid
вот вариант с циклом который хочу переделать в вариант без цикла:

$user_id = $_GET['user'];
$this_user_id = $_SESSION['user_id'];

$sql = "SELECT * FROM posts WHERE for_user_id=".$user_id;
$posts = mysqli_query($sql);

foreach ($posts as $post) {
echo $post['post_text'];

$sql = "SELECT * FROM likes WHERE for_post_id=".$post['post_id'];
$query = mysqli_query($sql);
$num = mysqli_num_rows($query);

echo $num." users like this";

foreach ($query as $like) {
if ($like['from_user_id'] == $this_user_id') $liked_by_this = true;
}

if ($liked_by_this) echo "You like it";
}
Быстрый ответ:

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