2013-06-06 5 views
0

У меня есть таблица «заказы», ​​которая сохраняет все заказы, сделанные на веб-сайте. Она сохраняет данные следующим образом:Комбинирование строк MySQL с одинаковым идентификатором PHP

ID | Session_id | image | item | extra | customer_name 

Дата Sample

12 | sdgfafjhsf | image1.jpg | coffee | milk | roger 
13 | sdgfafjhsf | image1.jpg | muffin | jam | roger 
14 | fjgjgsdfjg | image3.jpg | coffee | none | John 

В настоящее время у меня есть PHP доступ к базе данных и выплевывая все списки один за другим.

mysql_connect("localhost", "root", "") or die(mysql_error()) ; 
mysql_select_db("store") or die(mysql_error()) ; 

//Retrieves data from MySQL 
$data = mysql_query("SELECT * FROM orders WHERE status ='ordered'") or die(mysql_error()); //Puts it into an array 
while($info = mysql_fetch_array($data)) 
{ 

//Outputs the image and other data 

Echo "$info[customer_name] <img src='cameras/$info[image]'/> : $info[item] with $info[extras] <br />"; 


} 

Я идеально хочу, чтобы данные группировались по идентификатору сеанса. Таким образом, он печатает имя клиента и изображение один раз, а затем все связанные с ним элементы.

например. Роджер, кофе, молоко, сдобы, варенье

Любые идеи? Спасибо!

+0

Вы можете использовать group_concat. "SELECT *, GROUP_CONCAT (item) AS items, GROUP_CONCAT (дополнительно) AS extras FROM orders WHERE status = 'ordered' GROUP BY Session_id" – yash7690

ответ

0

Простой способ будет заказать SQL, так что вы получите все записи из каждой сессии следующих друг друг, а просто вспомнить последний идентификатор сеанса вы сгружен сказать, если вы должны вывести имя и изображение или нет; вот какой-то псевдо-код, чтобы показать, что я имею в виду;

$data = 
    mysql_query("SELECT * FROM orders WHERE status ='ordered' ORDER BY session_id") 
       or die(mysql_error()); 

$last_session_id = "**DUMMY**"; // Set a dummy value to not match the first row 

while($info = mysql_fetch_array($data)) 
{ 
    if($info['session_id'] != $last_session_id) 
    { 
    //Outputs the image and other data if a new session_id has been found 
    echo "$info[customer_name] <img src='cameras/$info[image]'/> : $info[item] with $info[extras] <br />"; 
    $last_session_id = $info['session_id']; 
    } else { 
    // Same session_id as last row, skip name and picture 
    echo "$info[item] with $info[extras] <br />"; 
    } 
} 

В качестве примечания, то API mysql_* база данных устарела, вы должны смотреть в использовании mysqli или pdo вместо этого.

+0

Привет, Joachim, спасибо за это! Работает отлично! –

0

хорошо попробовать это ..

SELECT Session_id,image,item,extra,customer_name FROM orders WHERE status='ordered' group by Session_id,image,item,extra,customer_name 
0

Здесь вы должны запустить два отдельных запроса. В первом запросе вы должны найти все отличное имя клиента, лучше, если вы используете идентификатор клиента, а не имя клиента, потому что идентификатор не может быть дублирован. Затем, после того, как все клиенты, заказавшие элемент, перебирают их в цикле и внутри цикла, запускают другой запрос, чтобы получить все заказы этого клиента с помощью идентификатора клиента или по имени клиента.

0

В вас while($info = mysql_fetch_array($data)) -loop, где вы печатаете вывод, вы можете добавить его в standard array, где ключи являются Session_ids.

Затем вы вызываете echo $foo['sdgfafjhsf'], чтобы получить массив с db-элементами, который вы можете перечислить соответствующим образом.

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