Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да СЪЕДИНИТЕ две колони с едни сериализирани данни?

MySQL не знае какво е PHP сериализация. Можете да съхранявате идентификаторите на категории като низ в следния формат:

2,4,5,10,...

След това използвайте комбинация от SUBSTRING_INDEX() и FIND_IN_SET() MySQL функции за проверка на съществуването на categories.id в ecommerce_products.catid :

SUBSTRING_INDEX(
    SUBSTRING_INDEX(ecommerce_products.catid,
        ',',
        FIND_IN_SET(categories.id, ecommerce_products.catid)
), ',', -1)

За да изберем заглавията на категориите за всеки запис на продукт, трябва да свържем заглавията чрез GROUP_CONCAT() функция, така че крайната заявка ще бъде нещо подобно:

SELECT p.id,
       p.catid
       GROUP_CONCAT(cat.title ORDER BY cat.id SEPARATOR '|') as 'categories',
       p.manid,
       p.name
FROM ecommerce_products AS p
LEFT JOIN categories AS cat
    ON cat.id = SUBSTRING_INDEX(SUBSTRING_INDEX(p.catid, ',', FIND_IN_SET(cat.id, p.catid)), ',', -1)
-- more query...
GROUP BY p.id; -- Group the result to concatenate the categories titles

При този подход може да се наложи да използвате $this->db->query(); метод за ръчно изпълнение на заявката.

Забележка:
Като алтернатива можете да използвате следното за ON изявление:

LEFT JOIN categories AS cat
    ON p.catid REGEXP CONCAT('[,]{0,1}', cat.id, '[,]{0,1}')

Тестов случай

Ето моят тестов случай на SQLFiddle :

SELECT p.id,
       p.name,
       GROUP_CONCAT(c.title ORDER BY c.id SEPARATOR '|') as 'categories'
FROM products as p
JOIN categories as c
  ON c.id = SUBSTRING_INDEX(SUBSTRING_INDEX(p.cat_id, ',', FIND_IN_SET(c.id, p.cat_id)) , ',', -1)
GROUP BY p.id;

Резултат:

ID    NAME          CATEGORIES
--    ---------     -----------
1     Product 1     Cat 1|Cat 3
2     Product 2     Cat 2|Cat 4
3     Product 3     Cat 1|Cat 4
4     Product 4     Cat 2|Cat 3


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. връзката с базата данни не работи в jar, но работи в eclipse

  2. Как да сравните две колони, за да намерите несравними записи в MySQL

  3. Как да промените паролата за root на mysql

  4. Извличане на данни за множество единични или препратки без подобен оператор

  5. MySqlDB на Python не се актуализира ред