Привет всем , у меня в Бд добавлено несколько значений по select , вопрос : Как мне на странице с категориями вывести именно то число на которой я странице по get id Допустим в бд поле у меня значение 18, 20 как мне получить именно 20
@iceblood русский не его родной язык, если бы мне так отвечали на иностранных сайтах с гугл транслита, то все был бы печально. @Ахмед SELECT * FROM 'название таблицы' WHERE id = 'твой id' https://www.mysqltutorial.org/mysql-where/
Через select добавляю товару несколько категорий в поле бд , Например выбрал 2 категории с id 20 и Id 18 и выглядит это как 20, 18 , как мне сделать чтоб на странице по categories.pho?id=20 отображался товар . У меня он не отображается потому что у товара 2 категории надо сделать так чтоб в 2 категориях отображался товар --- Добавлено --- У товара 2 категории нужно чтоб в 2 категориях отображался товар --- Добавлено --- Я как понимаю надо сделать массив и вернуть значение айди , но не понимаю как реализовать
@Ахмед, у тебя нарушение первого закона нормализации БД. Поле должно быть атомарным для того, что бы можно было работать с данными на уровне СУРБД. Грубо говоря никаких значений через запятую "20,18" там быть не должно. Для этого существуют отношения. Один ко многим, многие к одному и многие ко многим.
Предположим у тебя есть таблица товары с уникальным ID и таблица категории с уникальным ID . Можно создать таблицу отношений (справочник) с уникальным ID и полями товар, категория. В справочник в поле товар помещать ID товара из таблицы товара а в поле категория помещать ID из таблицы категория. Так появиться возможность из справочника доставать как все товары нужной категории так и все категории в которых находиться товар. Как то так.
Я сделал категории я могу вывести товар в 1 категории , у меня не получается вывести в 2 категориях сразу
вот честно, ты бы писал или уже на родном или на английском. Проще гуглом перевести твой вопрос, чем додумывать что ты хотел написать. что бы вывести один и тот же товар в разных категориях, твой товар должен иметь два родителя одновременно tb_category id | name 1 | конфеты вкусные 2 | конфеты на любителя tb_product id | name 1 | Аленка 2 | Мишутка 3 | Белочка tb_parents id | cat | product 1 | 1 | 2 2 | 2 | 2 3 | 1 | 1 4 | 2 | 1 в третьей таблице parents ты показываешь к какой категории относится продукт
Не, здесь кроме русского и английского другие языки нельзя использовать по правилам. @Ахмед Поищи типы отношений, как тебе уже подсказали. Надо подтянуть теорию. Может, попробуй поискать статьи на эту тему на родном языке. Три основных типа отношений между таблицами: один-к-одному, один-ко-многим, многие-ко-многим. У тебя как раз случай многие-ко-многим: у товара несколько категорий, у категории несколько товаров. Такое отношение реализуется через третью таблицу, как тебе уже подсказали. Ну и запросы потом чуть сложнее получаются, с join-ами. Код (Text): select * from product join product_category on product_category.product_id = product.id where product_category.category_id = 2; Соответственно, одна таблица с полями товара (но поля категория там нету), вторая таблица - с полями категории, и третья таблица с полями product_id, category_id, которая отвечает за хранение связей между товарами и категориями.
Проиллюстрирую своё прошлое сообщение. Для лучшего усвоения попробуй создать тренировочную БД. Для примеров понадобиться mysql или maridb. Дамп базы будет во вложении. Ниже приведу код с комментариями и диаграмму отношений из которой должно стать понятно, что связь между категориями и продуктами производится через промежуточную таблицу. Разверни базу и выполни запросы приведенные ниже. Код (Text): create database ahmed; use ahmed -- Предположим у тебя есть таблица товаров с уникальным ID create table product( id int not null auto_increment primary key , name text ); -- и таблица категорий с уникальным ID create table category( id int not null auto_increment primary key , name text ); -- Можно создать таблицу отношений (справочник) с уникальным ID и полями товар, категория. create table catalog ( id int auto_increment primary key, category_id int not null , product_id int not null , constraint catalog_category_id_fk foreign key (id) references category (id), constraint catalog_product_id_fk foreign key (id) references product (id) ); -- Добавим четыре категории insert into category (name) values ('Напитки'), -- id 1 ('Напитки алкогольные'), -- id 2 ('Напитки безалкогольные'), -- id 3 ('Закуски'); -- id 4 -- Добавим несколько товаров insert into product (name) values ('Кефир'), -- id 1 ('Морс'), -- id 2 ('Нарзан'), -- id 3 ('Жигули'), -- id 4 ('Партвейн 777'), -- id 5 ('Сухарики'); -- id 6 -- Свяжем некоторые товары с категориями через справочник (он же каталог) insert into catalog (category_id, product_id) VALUES (1,2), (3,2), (1,3), (3,3), (1,5), (2,5), (4,6); -- Теперь переходя к твоей задаче - вывести товар в двух категориях -- или по русски: вывести все категории в которых находится определенный товар. -- К примеру мы хотим узнать в какие категории входит товар "Морс" select product.`name` , category.`name` from product, category, catalog where product.name = "Морс" and product.id = catalog.product_id and category.id = category_id -- Теперь мы хотим узнать в какие категории входит товар "Сухарики" select product.`name` , category.`name` from product, category, catalog where product.name = "Сухарики" and product.id = catalog.product_id and category.id = category_id -- Изменим условие задачи и выведем все товары находящиеся в категории "Напитки" select product.`name` , category.`name` from product, category, catalog where category.name = "Напитки" and product.id = catalog.product_id and category.id = category_id; -- У нас есть товары еще не внесенные ни в одну из категорий. Найдем их. select product.`name` , category.`name` from product, category, catalog where product.id <> catalog.product_id; -- А теперь просмотрим весь каталог. Если сделать select * from catalog -- увидим мало о чем говорящие цыфры. Вместо них подставим значения имен из -- таблиц категорий и продуктов и отсортируем по наименованию категории. select catalog.id, category.`name`, product.`name` from catalog, product, category where product.id = catalog.product_id and category.id = category_id order by category.name;
Вроде понял как делать а я делал так в tb_product id | name | id_cat 1 | Аленка | 20, 18 2 | Мишутка | 20 3 | Белочка| | 18 такое возможно сделать ? Чтоб в 1 структуре было 2 категории
@Ахмед, это грубейшая и самая распространённая ошибка начинающих программистов, которые считают, что немножко знаний по РНР открывают перед ним все двери. На самом деле изучение MySQL должно проходить вообще в отрыве от РНР и любого другого языка. Достаточно учебника и PhpMyAdmin. SQL это декларативный язык программирования, там существуют свои законы.
Как лучше связку сделать , при добавлении товара чтоб автоматом id заполнялось в parents --- Добавлено --- Id категории добавил а вот id товара как добавить авто инкремент стоит
Код (Text): insert into product (name) values ('Сметана'); SELECT LAST_INSERT_ID(); Но если серевер postgresql https://habr.com/ru/post/72590/ Для универсальности нужно посмотреть в сторону ORM или https://www.php.net/manual/ru/pdo.lastinsertid.php
Ну так в этой поделке есть связи, правда, какие-то странные: https://www.redbeanphp.com/index.php?p=/many_to_many Или с английским хуже чем с русским? Без русского программист может обойтись, если не планирует работать в России или общаться на русских форумах. Без английского - никак.