Скажімо, у мене є ці дві змінні в MySQL
SET data1 = "1,2,3,apple,4,5";
SET data2 = "apple,orange,5";
Як отримати кількість елементів, які відображаються на цих двох змінних?
Відповіді:
0 для відповіді № 1Якщо вам дійсно потрібно зробити це на MySQL стороні, ви можете створити збережену процедуру (або збережену функцію), в якій:
- створити тимчасову таблицю (тому що збережені процедури MySQL не можуть обробляти масиви, тому ви повинні використовувати тимчасову таблицю як масив)
- створити ЩО циклу, щоб розібрати ваші рядки, використовуючи LOCATE (), LEFT () і RIGHT () функції (Посібник MySQL: функції рядків) вставлення кожного значення у тимчасову таблицю
- виконайте необхідні виділення (з перехрестями тощо) з цієї тимчасової таблиці
Але це рішення дійсно далеко не елегантне. Зберігання тегів в окремій таблиці (як згадувалося вище, один тег в рядку) набагато краще.
0 для відповіді № 2
Неможливо розбити список і підрахувати елементи. Єдиний спосіб вибухнути його на вашій рідній мові, маніпулюючи значенням
Приклад у php:
$values = mysql_result();
echo count(explode(",", $values));
Інший спосіб полягає в тому, щоб помістити всі теги в окрему таблицю і приєднати їх до зведеної таблиці, після чого можна зробити щось подібне:
select
count(*)
from
items
join
pivot on pivot.item_id = items.id
join
tags on pivot.tag_id = tags.id
where
item.id = {itemid}