|
|
|
| Здравствуйте! У меня такой вопрос: как удалить из массива повторяющиеся значения? Ну вот к примеру есть массив со значениями: 12233345556777, а надо получить вот такой 1234567. Как это можно сделать? Массив у меня формируется из запроса:
$sql2="SELECT id_catalog FROM product WHERE id_product='".$id['id']."'";
$s2=mysql_query($sql2);
$name=mysql_fetch_array($s2);
|
Вот этот вот массив $name и нужно обработать.
Заранее благодарен. | |
|
|
|
|
|
|
|
для: Mefisto84
(23.05.2006 в 16:27)
| | SELECT DISTINCT id_catalog FROM ... | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2006 в 16:36)
| | Увы это я пробовал, ничего не получается. А дело все в том что запрос работает в цикле, и массив формируется не от одного запроса, а от n-го количетсва запросов. Вот именно по этому дистинкт и не работает, как я понял. Т.к. в этом селекте выбирается сторого одна запись и нет тут повторений. Или я ошибаюсь? | |
|
|
|
|
|
|
|
для: Mefisto84
(23.05.2006 в 17:49)
| | В таком случае (если однотипные запросы Вы производите в цикле) , вероятно, работа с БД у Вас реализована неоптимально.
Можно конечно сделать как-то так:
<?
$arr = array(); .. массив под результаты
for(......) // это цикл по запросам
{
$sql2="SELECT id_catalog FROM product WHERE id_product='".$id['id']."'";
$s2=mysql_query($sql2);
while($row=mysql_fetch_row($s2))
$arr[$row[0]] = 1; // добавляем результаты как ключи массива
}
foreach($arr as $id_catalog => $one)
echo $id_catalog;
?>
|
но правильнее, на мой взгляд,устранить цикл запросов. | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2006 в 18:07)
| | Спасибо, попробую. Но я же конечно только за то как правильнее, только видимо не умею :-) если подскажете то я только за! Вот код полностью:
$sql1="SELECT DISTINCT id FROM image";
$s1=mysql_query($sql1);
echo "<table border=\"1\" width=\"100%\" align=\"center\" cellpadding=\"3\" cellspacing=\"1\" bordercolordark=\"white\" bordercolorlight=\"black\">";
echo "<tr align=\"center\" bgcolor=\"gray\"><td><span class=\"tt\">Название каталога</span></td><td><span class=\"tt\">Описание</span></td></tr>";
while($id=mysql_fetch_array($s1))
{
$sql2="SELECT id_catalog FROM product WHERE id_product='".$id['id']."'";
$s2=mysql_query($sql2);
$name=mysql_fetch_array($s2);
$sql5="SELECT *FROM catalog WHERE id_catalog='".$name['id_catalog']."'";
$s5=mysql_query($sql5);
$na=mysql_fetch_array($s5);
echo "<tr>";
echo "<td align=\"center\"><span class=\"text\"><a href=\"modules.php?name=Gallery&id_catalog=".$na['id_catalog']."\">".$na['nam']."</a></span></td><td>".$na['description']."</td>";
echo "</tr>";
}
echo "</table>";
|
Значит в первом запросе происходит выбор id без повторений из таблицы image.
Во втором запросе выбирается id_catalog из таблицы product, по id выбранным из таблицы image. И вот тут то и начинается проблема, а именно массив $name. ну а дальше вы знаете.
Уже потом по выбранным id_catalog ведется выбор всего из табоицы catalog. Вот собственно о чем я и говорил, нужно что бы второй запрос выбирал без повторений, как это лучше сделать, если в цикле это плохо. | |
|
|
|
|
|
|
|
для: Mefisto84
(23.05.2006 в 18:34)
| |
SELECT DISTINCT catalog.id_catalog as id, catalog.nam as nam, catalog.description as descr
FROM image
JOIN product ON image.id = product.id_product
JOIN catalog ON product.id_catalog = catalog.id_catalog
|
| |
|
|
|
|
|
|
|
для: Trianon
(23.05.2006 в 19:04)
| | Попробовал :-( не работает. Вставил в phpmyadmin пишет :
You have an error in your SQL syntax near 'ON image.id = product.id_product JOIN catalog ON product.id_catalog = catalog.id' at line 1
|
Таблицы у меня не связанные, если это имеет значение. | |
|
|
|
|
|
|
|
для: Mefisto84
(23.05.2006 в 21:18)
| | А так?
SELECT id_catalog FROM product WHERE id_product = '".$id['id']."' GROUP BY id_catalog
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(23.05.2006 в 22:28)
| | ну я же говорил. Группировка тут не поможет, и выбор без повторений тоже! Там запрос работает в цикле, то есть каждый раз извлекает по одной записи, т.е. группировать нечего, проще говоря. | |
|
|
|
|
|
|
|
для: Mefisto84
(23.05.2006 в 21:18)
| | Где-то Вы ошиблись, значит. У меня этот запрос (в точности скопированный из форума в phpMyAdmin через буфер) нормально выдает результат. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 09:57)
| | Ну прям фантастика какая-то. Я тоже просто скопировал запрос в майадмин и все. Еще раз взял скопировал, нет, все равно пишет ту же самую ошибку. Странно. И тот код который вы мне написали на удаление из массива повторяющихся значений чего-то у меня не работает. Выводит мне лишь один id_catalog и все. А должен вывести 3 штуки. Может я его не туда пихаю? В какую часть кода его нужно всунуть?
Спасибо. | |
|
|
|
|
|
|
|
для: Mefisto84
(24.05.2006 в 11:01)
| | А MySQL-сервер у Вас какой версии? | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 11:17)
| | Это можно посмотреть при помощи phpinfo()?
Вот что я там нашел Client API version 3.23.49 . Это то? Или нет? | |
|
|
|
|
|
|
|
для: Mefisto84
(24.05.2006 в 14:16)
| | Нет, не клиента, а сервера.
SELECT VERSION( ) ;
phpMyAdmin пишет её на начальной странице. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 14:20)
| | а все понятно, увидел на первой странице админа MySQL 3.23.53-max. | |
|
|
|
|
|
|
|
для: Mefisto84
(24.05.2006 в 18:19)
| | Все наконец-то разобрался, там к Вашему коду, нужно было добавить еще немного, и сейчас все работает, вот так:
while($row=mysql_fetch_row($s2))
{
$name[$row[0]] = 1;
}
foreach($name as $id_catalog => $one)
$id_catalog;
}
reset($name);
while(list($key, $val) = each($name))
{
//echo ("$key = $val<br>");
$sql5="SELECT *FROM catalog WHERE id_catalog=$key";
|
Спасибо за помощь. | |
|
|
|
|
|
|
|
для: Mefisto84
(24.05.2006 в 18:19)
| | >3.23.53-max.
Редкое старье однако. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 20:16)
| | Да? А я и не знал. А что вы посоветуете? Какую версию? | |
|
|
|
|
|
 41.8 Кб |
|
|
для: Trianon
(23.05.2006 в 16:36)
| | Привет!
Извените что отвечаю Вам по чужому сообщению, но тему вчерашнюю закрыли. Вы просили вложить вчера файл php.ini вкладываю.
с уважением Сквиртел13. | |
|
|
|