Tecvid
29.03.2015 - 07:43
приветствую всех!) стоит такая задача:
надо достать данные из одной таблицы, затем в цикле достать из другой таблицы, и получится что для 10 записей например будет 11 запросов, чтобы избежать этого решил использовать join, и теперь сколько бы записей ни было запрос будет один, казалось бы всё решено, но..
нужно чтобы из первый таблицы поучить данные, а из второй количество строк, причём ещё и проверить есть ли во второй базе хоть одно поле где идентификатор публикации и идентификатор пользователя (который просматривает страницу) равны, такое осуществить реально?
Да, наверно. На выходе ты получишь все столбцы таблиц (всех или которые укажешь) остальное решается через условие WHERE.
_____________
Принимаю заказы, писать в ЛС
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);
а как дальше делать не знаю
Цитата (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
29.03.2015 - 08:41
Цитата |
Что дальше не знаешь? |
ну раз спрашиваю

в сгл не так уж силён, никогда не приходилось такие запросы делать
Конкретно, мы твои мысли не читаем. Таблицы, названия столбцов, что нужно сделать.
_____________
Принимаю заказы, писать в ЛС
Tecvid
29.03.2015 - 08:52
этим одним запросом:
1) из первой таблицы надо получить лишь данные
2) из второй количество строк + ещё и проверить есть ли среди этих строк где есть и id публикации (не страницы, не page_id, a post_id, который получаем в запросе) и id пользователя
вот и всё
Названия таблиц и полей подставь свои
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
29.03.2015 - 09:34
я, честно говоря, ничего не понял, похоже вы меня не так поняли, и поэтому у вас запрос не соответсвует, сейчас я вам на реальном примере распишу с реальными именами:
есть таблицы:
= 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
29.03.2015 - 10:27
Медведь, а это два запроса, нет? и второй уже придётся запихнуть в цикл, но я как ращ и стараюсь избегать этого
или же я что-то не так понял из предложенного вами варианта
Цитата (Tecvid @ 29.03.2015 - 10:27) |
Медведь, а это два запроса, нет? и второй уже придётся запихнуть в цикл, но я как ращ и стараюсь избегать этого
или же я что-то не так понял из предложенного вами варианта |
Зачем второй - в цикл? Если нужно получить количество строк, то по любому запрос надо делать отдельно, потом
- mysqli_num_rows // количество строк
- и mysqli_free_result
_____________
Принимаю заказы, писать в ЛС
Tecvid
29.03.2015 - 10:41
но ведь нужно же получить к каждой публикации отдельно
Видимо нужно ещё подробнее объяснить
1 ...
2 ...
....
_____________
Принимаю заказы, писать в ЛС
Tecvid
29.03.2015 - 11:22
вот вариант с циклом который хочу переделать в вариант без цикла:
$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";
}
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.