2016-08-16 4 views
-1

У меня есть таблица, как этотгруппы и сосчитать в MySQL

table1

col1    
    ______ 
    data1 
    data2 
    data3    
    data4    
    data5    

и table2

data1 
_________ 
data1,data2 
data1 
data3,data1 
data5 
data4,data5,data1 
data2 

Могу ли я получить запрос, который соединяет обе таблицы с результатом два столбца первого столбца содержимого table1 .col1 и количество содержимого столбца 2, содержимое которого соответствует первому столбцу

column1|column2    
_______|_______ 
data1 | 4 
data2 | 2 
data3 | 1    
data4 | 1   
data5 | 2 

На данный момент я использую запрос внутри цикла в PHP

$s="select col1 from table1"; 
foreach($conn->query($s) as $r);) { 
echo "select count(*) from table2 where data1 like '%$r[col1]%' "; 
} 

Если есть запрос, который может достичь без запроса внутри зацикливание.

btw Я использую помощник запроса pdo вместо mysql_query, я просто пишу немного кода с помощью mysql_query.

Спасибо.

+0

** ВНИМАНИЕ **: Если вы просто изучаете PHP, не используйте интерфейс ['mysql_query'] (http://php.net/manual/en/function.mysql-query.php) , Это так ужасно и опасно, что он был удален в PHP 7. Замена, такая как [PDO, не трудно учиться] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps -pdo-for-database-access /) и руководство, подобное [PHP The Right Way] (http://www.phptherightway.com/), объясняет лучшие практики. Ваши пользовательские параметры ** не ** [правильно экранированные] (http://bobby-tables.com/php), и есть [SQL-инъекции ошибок] (http://bobby-tables.com/), которые могут быть использованы , – tadman

+0

вы правы, как мой нижний колонтитул, сказал, я просто использую mysql_query, чтобы сократить свой quetsion. – cangak

+0

Опубликуйте свой код PDO. Не ставьте устаревший мусор, который не имеет никакого отношения к тому, что вы на самом деле делаете. Если ваш PHP-код не является проблемой, опустите его и сосредоточьтесь на запросе. – tadman

ответ

2

Прежде всего, вы не должны хранить несколько значений в одном поле (таблица2), когда вам нужны его значения в SQL-запросах.

В любом случае, вы можете использовать функцию FIND_IN_SET() MySQL, чтобы присоединиться к обеим таблицам, а затем используйте GROUP BY и COUNT(*), чтобы получить то, что вам нужно.

SELECT table1.col1 as column1, count(*) as column2 
FROM table1 
LEFT JOIN tabl2 ON FIND_IN_SET(table1.col1,table2.data1) 
GROUP BY table1.col1; 

Несмотря на то, что есть готовность к подобным вещам, вы должны следить за проблемами производительности, которые могут возникнуть здесь.

+0

Это работает, спасибо, человек, я сохранил свою жизнь, о производительности, это не большое дело, couse это всего около 1000 данных, LOL – cangak

Смежные вопросы