Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вывод
 
 автор: sancho   (17.03.2005 в 12:02)   письмо автору
 
 

Здравствуйте, подскажите пожалуйста или ссылку дайте. У меня данные выводятся так:

Иванов - бампер
Иванов - крыло
Иванов - спойлер

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

   
 
 автор: cheops   (17.03.2005 в 12:22)   письмо автору
 
   для: sancho   (17.03.2005 в 12:02)
 

Нужно больше информации... А как сейчас выводится?

   
 
 автор: sancho   (17.03.2005 в 13:10)   письмо автору
 
   для: cheops   (17.03.2005 в 12:22)
 

На данный момент выводится так,


select b.INFO, a.INFO2 from
(
select SUBSTR(INFO,23) as INFO2,
from zakaz where INSTR(INFO, 'myshop.ru') = 0    
group by SUBSTR(INFO,23)
) a
left join
(select INFO from zakaz where (INSTR(INFO, 'myshop.ru') > 0 
group by INFO) b
order by INFO


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

   
 
 автор: cheops   (17.03.2005 в 13:38)   письмо автору
 
   для: sancho   (17.03.2005 в 13:10)
 

Дело в том, что SQL не предназначен для таких манипуляций - здесь следует обработать данную ситуацию во внешней программе, выводящей запрос пользователю, т.е. обработать ситуацию в цикле вывода.

   
 
 автор: sancho   (17.03.2005 в 13:58)   письмо автору
 
   для: cheops   (17.03.2005 в 13:38)
 

А не подскажите как можно это реализовать?

   
 
 автор: Axxil   (17.03.2005 в 16:11)   письмо автору
 
   для: sancho   (17.03.2005 в 13:58)
 

Например есть три таблицы

clients с данными о клиенте
fields:
c_id
c_name
________________________

goods с данными о товарах
g_id
g_name

------------------------------------------

orders с данными о покупках
fields
order_id
c_id
g_id

Соответсвенно заполняем эти таблицы.
И потом уже будет легко составить запрос который будет по id клиента выводить информацию о его заказах

<?
// получаем имя покупателя
$sql="SELECT name FROM clients where c_id=".$id;
$query=mysql_query($sql);
$r=mysql_fetch_array($query1);
$c_name=$r['name'];
?>
<table>
<tr><td><?=$c_name;?></td></tr>
<tr><td>
<?//получаем информацию о заказах
$sql="SELECT t2.g_name FROM goods t1,orders t2 
WHERE t1.g_id=t2.g_id
AND t2.c_id="
.$id;
$query=mysql_query($sql);
while (
$r=mysql_fetch_array($query)){
echo 
$r['g_name']."<br>";
}
?>
</td></tr>
</table>

Надеюсь смысл понятен...
PS Это в теории баз данных называется приведение к третьей (если не ошибаюсь) канонической форме

   
 
 автор: sancho   (17.03.2005 в 17:57)   письмо автору
 
   для: Axxil   (17.03.2005 в 16:11)
 

Спасибо, щас попробую.

   
 
 автор: sancho   (18.03.2005 в 11:35)   письмо автору
 
   для: sancho   (17.03.2005 в 17:57)
 

А если нет возможности использовать третью таблицу, то как еще можно реализовать? Подскажите пожалуйста, pls :-(((

   
 
 автор: sancho   (18.03.2005 в 17:44)   письмо автору
 
   для: sancho   (18.03.2005 в 11:35)
 

Помогите pls с проблемой.

   
 
 автор: cheops   (18.03.2005 в 19:38)   письмо автору
 
   для: sancho   (18.03.2005 в 17:44)
 

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

   
 
 автор: sancho   (21.03.2005 в 10:45)   письмо автору
 
   для: cheops   (18.03.2005 в 19:38)
 

Есть одна таблица, в которой хранится IP адреса пользователей и список посещаемых ресурсов(INFO) этим пользователем, также в INFO хранится имя пользователя и имя его компа в таком виде (Иванов Иван (pc001.myshop.ru)). Из этой таблицы я вывожу имя пользователя, список ресурсов на которых был пользователь, IP'шник и счетчик посещения того или иного ресурса, вот таким образом:

select b.name, a.resurs, a.counter, a.IP from
(
select
   IP
   SUBSTR(INFO,23) as resurs,
   count (INFO) as counter
from TABLE
where INSTR(INFO, 'myshop.ru') = 0  
group by IP, SUBSTR(INFO,23)
) a
left join
(select IP, name from TABLE where (INSTR(INFO, 'myshop.ru') > 0) group by IP, INFO) b
on a.IP = b.IP
order by name

в итоге выглялит, вот так:

Иванов Иван (pc001.myshop.ru) - посещаемый ресурс№1 - 5 - IP
Иванов Иван (pc001.myshop.ru) - посещаемый ресурс№2 - 2 - IP
Иванов Иван (pc001.myshop.ru) - посещаемый ресурс№3 - 5 - IP
Иванов Иван (pc001.myshop.ru) - посещаемый ресурс№4 - 4 - IP

надо что бы имя пользователя выводилось один раз. Может как то средствами PHP можно это сделать, подскажите пожалуйста?

   
 
 автор: sancho   (21.03.2005 в 14:36)   письмо автору
 
   для: sancho   (21.03.2005 в 10:45)
 

неужели никто не знает?

   
 
 автор: cheops   (22.03.2005 в 00:17)   письмо автору
 
   для: sancho   (21.03.2005 в 10:45)
 

Я бы не стал менять SQL-запрос, а проверял бы значение имени следующим манером:
<?php
// Устанавливаем соединение с базой данных
include "config.php";
// Формируем SQL-запрос
$sql="select b.name, a.resurs, a.counter, a.IP from 

select 
   IP 
   SUBSTR(INFO,23) as resurs, 
   count (INFO) as counter 
from TABLE 
where INSTR(INFO, 'myshop.ru') = 0   
group by IP, SUBSTR(INFO,23) 
) a 
left join 
(select IP, name from TABLE where (INSTR(INFO, 'myshop.ru') > 0) group by IP, INFO) b 
on a.IP = b.IP 
order by name"

// Выполняем SQL-запрос
$res mysql_query($sql); 
// Проверяем корректность его выполнения
if(!$res) exit(mysql_error());
// Временная переменная
$name_old "";
// В цикле выводим результат
while($r mysql_fetch_array($res))
{
  
$name $r['b.name'];
  if(
$name == $name_old$print_name "";
  else 
$print_name $name;
  
// Присваиваем временной переменной $name_old
  // текущее значение имени
  
$name_old $name;
  
// Вывод строки с именами и прочим
  
echo $print_name." (".$r['a.resurs'].") - Посещаемый ресур №<br>";
}
?>

Т.е. храним имя с предыдущей итерации цикла во временной переменной $name_old, если оно не совпадает на следующей итерации с именем извлечённым из базы данных - значит перед нами новое имя - выводим его, если совпадает, значит старое имя - вместо имени выводим пустую строку.

   
 
 автор: sancho   (23.03.2005 в 18:00)   письмо автору
 
   для: cheops   (22.03.2005 в 00:17)
 

Спасибо Cheops, за идею, сработало!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования