Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.07.2016
Сообщений: 11

Вывод данных из 2-х таблиц по ключи из первой таблицы

16.01.2020, 07:21. Показов 500. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Честно пытался разобраться, 3 дня пыхтел.

Есть скрипт лайков. В БД 2 таблицы - в первой id блока, имя блока и кол-во лайков блока, во втором post_id (связка с 1 аблицей) и IP проголосовавшего. Сначала было через foreach, всё сделал, работало. Потом понял, что нужно выводить в определенных местах страницы.

Сделал так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
require_once('mysql.php'); # библиотека для работы с MySQL
 
$dbObj = new MySQL();
 
# при успешном запросе, результат будет в виде массива
$arPostsList = $dbObj->query("SELECT * FROM posts");
$arIpList = $dbObj->query("SELECT * FROM unique_likes");
 
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
</head>
<body>
 
<? if (is_array($arPostsList) && count($arPostsList) > 0){?>
 
<script>
function doAction(id,type){
    $.post('doAjax.php', {id:id, type:type}, function(data){
        if(isNaN(parseFloat(data))){
            alert(data);
        }else{
            $('.like'+id).css({
                'color': 'red',
            });
            $('#'+id+'_'+type+'s').text(data);
            
        }
    });
}
</script>
 
<div style="border:1px solid #778899;">
    <h2><?=$arPostsList[0]['name']?></h2>
    <a class="like<?=$arPostsList[0]['id'];?>" style="color: blue;" href="javascript:;" onclick="doAction('<?=$arPostsList[0]['id'];?>','like');"> (<span id="<?=$arPostsList[0]['id'];?>_likes"><?=$arPostsList[0]['like'];?></span>)</a>
</div> 
<div style="border:1px solid #778899;">
    <h2><?=$arPostsList[1]['name']?></h2>
    <a class="like<?=$arPostsList[1]['id'];?>" style="color: blue;" href="javascript:;" onclick="doAction('<?=$arPostsList[1]['id'];?>','like');"> (<span id="<?=$arPostsList[1]['id'];?>_likes"><?=$arPostsList[1]['like'];?></span>)</a>
</div>   
 
<? } ?>
 
</body>
</html>
Проблема в том, что мне надо связать 2 таблицы, что бы помечать цветом, если уже голосовал. Типа такого:
JavaScript
1
2
3
4
5
6
7
8
      
    <script>
        $( function(){    
            $('.like<?=$arPostsList['id'];?>').css({
                'color': 'red',
            });
        });
    </script>
Можно сделать
PHP
1
$arPostsList = $dbObj->query("SELECT * FROM posts LEFT JOIN unique_likes ON posts.id = unique_likes.post_id");
но тут надо выбирать данные по id из первой таблицы. А я не знаю как)

Или может есть более изящное решение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2020, 07:21
Ответы с готовыми решениями:

Склейка двух таблиц и вывод данных только из первой таблицы
Подсобите с sql запросом, сам что то додуматься не могу. Есть два таблицы TABLE id | name TABLE_TWO cid | table_one_id | text ...

Вывод из двух таблиц. Все из первой таблицы. И по условию из второй
Есть такой запрос: SELECT turagent_kassa.*, turagent_manager.`title`,`percent`, `finish` FROM turagent_kassa, turagent_manager WHERE...

Вывод записей первой таблицы, которых нет во второй (таблицы отличаются набором столбцов и строк)
Есть таблица Недвижимость (код недвижимости, город, адрес, кол-во комнат, площадь) и есть таблица Сделки (код сделки, код недвижимости, код...

3
Невнимательный
 Аватар для ft4l
3107 / 1282 / 358
Регистрация: 08.02.2013
Сообщений: 7,517
Записей в блоге: 2
16.01.2020, 14:25
если правильно понял, и если запрос типа такого будет работать )
SELECT a.*, SUM(b.user_ip = 'xxx.xxx.xxx.xxx') ip_in
FROM posts а LEFT JOIN unique_likes b ON a.id = b.post_id
GROUP BY 1;
0
0 / 0 / 0
Регистрация: 22.07.2016
Сообщений: 11
16.01.2020, 20:35  [ТС]
Цитата Сообщение от x_lab Посмотреть сообщение
если правильно понял, и если запрос типа такого будет работать )
SELECT a.*, SUM(b.user_ip = 'xxx.xxx.xxx.xxx') ip_in
FROM posts а LEFT JOIN unique_likes b ON a.id = b.post_id
GROUP BY 1;
Любое упоминание ip выдает ошибку синтаксиса - и 'xxx.xxx.xxx.xxx' и '.$_SERVER['REMOTE_ADDR'].'

Сделал по другому. Упростил. Решил отказаться от ip. Лайки буду выводить в отдельных блоках по номеру строки в таблице. При голосовании изменять стиль css (иконку) и записывать в cookies.

Получаю данные из БД
PHP
1
2
3
4
5
6
7
8
9
<?php
 
require_once('mysql.php'); # библиотека для работы с MySQL
 
$dbObj = new MySQL();
 
$arPostsList = $dbObj->query('SELECT * FROM posts');
 
?>
Вывожу на страницу
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
<script>
function doAction(id,type){
    $.post('doAjax.php', {id:id, type:type}, function(data){
        if(isNaN(parseFloat(data))){
            alert(data);
        }else{
            $('#'+id+'_'+type+'s').text(data)
            $('.like'+id).css({'color': 'red'})
        }
    });
}
</script>
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<div>
    <h2><?=$arPostsList['name']?></h2>
    <a class="like<?=$arPostsList[0]['id'];?>"  style="color: blue;" href="javascript:;" onclick="doAction('<?=$arPostsList[0]['id'];?>','like');"> (<span id="<?=$arPostsList[0]['id'];?>_likes"><?=$arPostsList[0]['like'];?></span>)</a>
</div> 
<div>
    <h2><?=$arPostsList['name']?></h2>
    <a class="like<?=$arPostsList[1]['id'];?>"  style="color: blue;" href="javascript:;" onclick="doAction('<?=$arPostsList[1]['id'];?>','like');"> (<span id="<?=$arPostsList[1]['id'];?>_likes"><?=$arPostsList[1]['like'];?></span>)</a>
</div>   
<div>
    <h2><?=$arPostsList['name']?></h2>
    <a class="like<?=$arPostsList[2]['id'];?>"  style="color: blue;" href="javascript:;" onclick="doAction('<?=$arPostsList[2]['id'];?>','like');"> (<span id="<?=$arPostsList[2]['id'];?>_likes"><?=$arPostsList[2]['like'];?></span>)</a>
</div>
Тут при нажатии меняется стиль (для примера цвет ссылки)
JavaScript
1
$('.like'+id).css({'color': 'red'})
Помогите пожалуйста, как сохранить это дело в cookies?
(размещать буду на html страничке DLE, вдруг это важно.)
0
0 / 0 / 0
Регистрация: 22.07.2016
Сообщений: 11
17.01.2020, 18:26  [ТС]
В общем путем проб и ошибок, а так же неистового гугления и курения мануалов и форумов, пришел к реализации первоначального варианта.

Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
require_once('mysql.php'); // библиотека для работы с MySQL
$dbObj = new MySQL();
 
// ip пользователя в переменную
$ip = $_SERVER['REMOTE_ADDR']; 
// извлекаем данные из бд
// все посты
$arPostsList = $dbObj->query("SELECT * FROM posts");
// посты, где пользователь ставил лайк (если такие есть)
$arIpList = $dbObj->query("SELECT * FROM posts LEFT JOIN unique_likes ON posts.id = unique_likes.post_id WHERE ip_v4 = '{$ip}'");
?>
 
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
</head>
<body>
 
<?php if (is_array($arPostsList) && count($arPostsList) > 0){?>
 
<script>
function doAction(id,type){
    $.post('doAjax.php', {id:id, type:type}, function(data){
        $('.like'+id).css({'color': 'red'})
        if(isNaN(parseFloat(data))){
            alert(data);
        }else{
            $('.like'+id).css({'color': 'red'}), // если ставит лайк, меняем стиль (цвет, другая иконка)
            $('#'+id+'_'+type+'s').text(data)            
        }
    });
}
</script>
 
<?php 
$arUserIp = array(); // в массив запишутся посты, где пользователь ставил лайк
foreach ($arPostsList as $arPost){ // все посты ?>
    <div style="border:1px solid #778899;">
        <h2><?=$arPost['name']?></h2>
        <a class="like<?=$arPost['id'];?>"  style="color: blue;" href="javascript:;" onclick="doAction('<?=$arPost['id'];?>','like');"> 
            (<span id="<?=$arPost['id'];?>_likes"><?=$arPost['like'];?></span>)
        </a>
    </div>
<?php
// далее отбираем посты, где пользователь ставил лайк 
$userIp = false;
if (is_array($arIpList) && count($arIpList) > 0){
foreach ($arIpList as $arIp){
    if($arPost['id'] == $arIp['post_id']) { # если есть посты, где пользователь уже ставил лайк ?>
        <script> $('.like'+<?=$arPost['id'];?>).css({'color': 'red'}) // меняем стиль таких постов (цвет, другая иконка) </script>      
<?php   $userIp = true; 
        break;
    }
}}
    if($userIp){ 
        $arUserIp[] = $arPost;
    }
}} ?>
</body>
</html>


Всем спасибо!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2020, 18:26
Помогаю со студенческими работами здесь

Вывод второй таблицы не под, а справа от первой
Подскажите, как вторую таблицу записать правее , а не под первой Код: static void Main(string args) { string...

Вывод нескольких записей второй таблицы по запросу из первой
Здраствуйте. Заранее извиняюсь, я нуб полный. Но я хочу сделать свой сайт на php и пытаюсь разобраться. Имею: - таблица project. В...

Вывод на экран первой части таблицы кодировки символов
Помогите пожалуйста, написать программу, которая выводит на экран первую часть таблицы кодировки символов (символы с кодами от 0 до 127)....

Вывод связанных таблиц из под главной таблицы в Access 2010
Добрый вечер! прошу прощени за столь не корректный заголовок. Есть таблица &quot;Клиенты&quot; со следующими полями: ID, Name, Code. И есть...

Вывод данных из таблиц
Здравствуйте, новичок в Django недавно начал изучать, и столкнулся с такой проблемой, встала такая задача, вывести все данные из таблиц...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru