вывод одного значения для нескольких строк

Sergafon

Новичок
вывод одного значения для нескольких строк

Здравствуйте, подскажите как решить такую проблемку
есть таблица products

products_id products_img products_name
1 a test1
2 a test2
3 b test3
4 c test4



Видно, что поле products_img у test1 и test2 одинаковое (но на самом деле мы этого не знаем)
Задача состоит в том, чтобы вывести одну 'a' для test1 и test2, т.е. нужно проверить, если у products_img несколько одинаковых значений, то для этих строк выводим одно значение products_img
Результат выводится тоже в виде таблицы
 

FractalizeR

Новичок
Ничего не понял в вопросе. Для каждого уникального значения products_img вывести склеенными все значения products_name? Тогда GROUP_CONCAT посмотрите
 

Фанат

oncle terrible
Команда форума
Sergafon
GROUP BY, DISTINCT

-~{}~ 16.01.08 01:14:

FractalizeR
У тебя должны быть постоянные головные боли. С таким-то давлением мозга на черепную коробку...

Не сочти за наезд, но твоя способность попадать пальцем в небо просто феноменальная. А все потому, что ты не можешь встать на место автора вопроса. все тебе кажется, что задачи здесь решают архисложные
 

Sergafon

Новичок
Автор оригинала: FractalizeR
Ничего не понял в вопросе. Для каждого уникального значения products_img вывести склеенными все значения products_name? Тогда GROUP_CONCAT посмотрите
попробую еще раз
результат выводится в виде таблицы

ФОТО(products_img) НАИМЕНОВАНИЕ(products_name)


так вот, если у нескольких позиций в поле НАИМЕНОВАНИЕ(products_name) одинаковые ФОТО(products_img)? то для этих позиций выводим одну фото

так понятнее?

-~{}~ 16.01.08 01:48:

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

мне кажется, что тут не с помощью sql нужно решать вопрос, а с помощью php
 

Mols

Новичок
Sergafon
Вопрос задан действительно не очень понятно.
Было бы проще если бы Вы показали таки, что должно получится в результате.
Какая таблица? да и ... что именно не получается ?
[telepatmode]
1.1. сортировка по "products_img" (SQL)
1.2. при построении таблицы (PHP) смотреть изменилась ли "products_img" и выводить её только если изменилась.

или читать и пробовать то, что написал FractalizeR до просветления )))
[/telepatmode]
 

zerkms

TDD infected
Команда форума
[off]
есть аццкое подозрение, что он вообще говорит о html
[/off]

:)))
 

baev

‹°°¬•
Команда форума
Sergafon, Вам же Mols уже всё расписал.

Отсортировать по products_img можете?
Вывести отсортированное в таблицу можете?
Поставить условие «если products_img равен предыдущему выведенному, то не выводить» можете?

Совершенно непонятно, что именно вызвало у Вас затруднения.
 

Sergafon

Новичок
Автор оригинала: Mols
Sergafon
Вопрос задан действительно не очень понятно.
Было бы проще если бы Вы показали таки, что должно получится в результате.
Какая таблица? да и ... что именно не получается ?
[telepatmode]
1.1. сортировка по "products_img" (SQL)
1.2. при построении таблицы (PHP) смотреть изменилась ли "products_img" и выводить её только если изменилась.

или читать и пробовать то, что написал FractalizeR до просветления )))
[/telepatmode]
допустим, если у test1 test2 и test3 одинаковые фото
вот то, что должно получиться на выходе

ФОТО НАИМЕНОВАНИЕ
----- test1
foto1 test2
----- test3

другими словами, нужно как-то проверить, если у нескольких наименований одинаковые названия фото, то выводит всего одно фото для этих наименований, а не одно и тоже фото для каждого наименования

т.е таблица будет такой
<tr>
<td rowspan='количество строк, где одинаковые foto'>foto1</td>
</tr>
<tr>
<td >test1</td>
</tr>
<tr>
<td >test2</td>
</tr>
<tr>
<td >test3</td>
</tr>

или может быть есть более простое решение этого?
 

FractalizeR

Новичок
Я рад все же, что не только я не понял вопрос :)

Я бы предложил такое решение:

SELECT products_img, GROUP_CONCAT(products_name SEPARATOR ",") AS productnames FROM products GROUP BY products_img

А в HTML выводим, перебирая каждую строку и получая все products_name, имеющие одинаковые фото по explode поля productnames
 

Sergafon

Новичок
речь, все-таки, об HTML
нет, html тут не причем

-~{}~ 16.01.08 22:10:


Я бы предложил такое решение:

SELECT products_img, GROUP_CONCAT(products_name SEPARATOR ",") AS productnames FROM products GROUP BY products_img

А в HTML выводим, перебирая каждую строку и получая все products_name, имеющие одинаковые фото по explode поля productnames
FractalizeR
спасибо, у меня получилось, правда может быть не так красиво как должно быть, но всеже
использовал explode и foreach

-~{}~ 16.01.08 22:17:

— и в чём затруднения?
Вам незнакомо «волшебное слово» IF?
оператор условного перехода IF мне знаком,
но как именно проверить, что-то....

-~{}~ 16.01.08 22:33:

всетаки интересно, как сделать другим способом
как в цикле (т.е. уже при выводе данных) проверить совпадают ли значения products_img?
 

Фанат

oncle terrible
Команда форума
попробуй потренироваться на чем-нибудь простом - монетках, или карандашах, раскладывая их по порядку на столе.
и проследи алгоритм. он несложный.
 

FractalizeR

Новичок
всетаки интересно, как сделать другим способом
как в цикле (т.е. уже при выводе данных) проверить совпадают ли значения products_img?
Ну как-то так:
PHP:
<?php
mysql_connect("localhost", "mysql_user", "mysql_password") or
   die("Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT * FROM products");

$currentPhoto = null;
while ($row = mysql_fetch_assoc($result)) {
  if($currentPhoto!==$row["products_img"]) {
    $currentPhoto = $row["products_img"];
    PrintPhoto($currentPhoto );
  }
  PrintProduct($row["products_name"]);
}
?>
спасибо, у меня получилось, правда может быть не так красиво как должно быть, но всеже
А вы запостите код, а мы посмотрим и наведем красоту :)
 

Sergafon

Новичок
вот что у меня получилось
это кусок кода

while($products = tep_db_fetch_array($products_query)) {
$products_name = explode(':', $products['productnames']);

echo ("<tr><td class=txt>" . $products['products_img'] . "</td>\n");
echo ("<td class=txt>");
foreach ($products_name as $names){
echo ($names . "<br>");
}
echo ("</td>\n");

}

-~{}~ 17.01.08 00:08:

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

-~{}~ 17.01.08 00:11:

$currentPhoto = null;
while ($row = mysql_fetch_assoc($result)) {
if($currentPhoto!==$row["products_img"]) {
$currentPhoto = $row["products_img"];
PrintPhoto($currentPhoto );
}
PrintProduct($row["products_name"]);
}
теперь понятно, а я голову ломал...
спасибо

а теперь у меня такой вопрос,
какой код будет работать быстрее, и вообще какой оптима льнее применять в данном случае?
 

baev

‹°°¬•
Команда форума
Мда.
Это — точно некая «альтернативная одарённость»...
 
Сверху