За последние 24 часа нас посетили 22877 программистов и 1223 робота. Сейчас ищут 726 программистов ...

Выборка из двух таблиц в асоциативний масив

Тема в разделе "PHP и базы данных", создана пользователем Prystapchuk Serhii, 12 июн 2020.

  1. Prystapchuk Serhii

    Prystapchuk Serhii Новичок

    С нами с:
    12 июн 2020
    Сообщения:
    5
    Симпатии:
    0
    Добрий день. Я новичок в PHP и сейчас читаю книгу "Разработка веб-приложений
    с помощью РНР и MySQL" в конце книги есть примеры приложений, а именно сохранения в закладки url адресов. Базовий код есть в книжке, а также предложения по усовершенствованию. Так вот необходимо сделать группировку закладок по темам (Спорт, Погода и так далее). Присвоение теми url адресу при добавлении в закладки я сделал. Теперь мне нужно вывести теми в таблице вместе с закладками.
    Есть таблица url адресов bookmark и таблица тем topic table_bookmark.png table_topic.png
    bookmark.png bookmark_topic.png
    Как я вижу логику:
    1. Извлечь из БД перечень тем по конкретному пользователю и поместить их в ассоциативный массив в виде ключей.
    2. Извлечь из БД url адреса по темах из пункта №1 и поместить их в ассоциативный массив в виде значений.
    3. В HTML таблице внешним циклом выводить теми, а внутренним url адреса.

    Трудности возникают во 2 пункте. Использую mysqli.
    Впервые пишу на форуме так что извините за невнятное объяснение.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Какие?
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @Prystapchuk Serhii, у вас в структуре темы общие, привязка к пользователям (кстати, почему нет нормализации?) идет по самим закладкам. Поэтому темы выбирайте все, а закладки уже конкретного пользователя. Также можно использовать LEFT JOIN, особенно если справочник тем большой или формируется пользователями самостоятельно (т.е. потенциально большой).

    Что касается пункта 3, можно вывести одним циклом. В запросе сделайте сортировку сначала по темам и при выводе отслеживайте изменение id темы (при появлении нового id запоминайте его как текущий и выводите заголовок новой темы).
    --- Добавлено ---
    P.S. У нас не спеша пилят простой закладочный сервис, но в нем пока вроде нет группировки/сортировки по темам в общем списке. Закладок ведь обычно дофига, так что нафиг их группировать в рамках пагинации? Или это для какого-то короткого списка, например за конкретный день?
     
    #3 miketomlin, 12 июн 2020
    Последнее редактирование: 12 июн 2020
  4. Prystapchuk Serhii

    Prystapchuk Serhii Новичок

    С нами с:
    12 июн 2020
    Сообщения:
    5
    Симпатии:
    0
    Я еще очень слаб в проектировании БД и приведении их к нормальным формам. Можно подробней.
     
  5. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
  6. Prystapchuk Serhii

    Prystapchuk Serhii Новичок

    С нами с:
    12 июн 2020
    Сообщения:
    5
    Симпатии:
    0
    вот
     

    Вложения:

    • bookmarks.zip
      Размер файла:
      934 байт
      Просмотров:
      1
  7. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Prystapchuk Serhii хоть бы посмотрел что там внутри ,перед тем как отправить
    Код (Text):
    1. -- phpMyAdmin SQL Dump
    2. -- version 4.9.0.1
    3. -- https://www.phpmyadmin.net/
    4. --
    5. -- Хост: 127.0.0.1:3306
    6. -- Час створення: Чрв 16 2020 р., 14:19
    7. -- Версія сервера: 5.6.43-log
    8. -- Версія PHP: 7.0.33
    9.  
    10. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    11. SET AUTOCOMMIT = 0;
    12. START TRANSACTION;
    13. SET time_zone = "+00:00";
    14.  
    15.  
    16. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    17. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    18. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    19. /*!40101 SET NAMES utf8mb4 */;
    20.  
    21. COMMIT;
    22.  
    23. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    24. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    25. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
     
  8. Prystapchuk Serhii

    Prystapchuk Serhii Новичок

    С нами с:
    12 июн 2020
    Сообщения:
    5
    Симпатии:
    0
    сорян
     

    Вложения:

    • _BASE_.zip
      Размер файла:
      4,5 КБ
      Просмотров:
      0
  9. Prystapchuk Serhii

    Prystapchuk Serhii Новичок

    С нами с:
    12 июн 2020
    Сообщения:
    5
    Симпатии:
    0
    сорян
     

    Вложения:

    • _BASE_.zip
      Размер файла:
      4,5 КБ
      Просмотров:
      0
  10. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    У вас самая простая ошибка «ненормализации». Прочитать про это – дело пяти мин.