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

Форум MySQL

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

 

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

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

тема: можно ли через SELECT получить строку со знаениями через запятую?
 
 автор: RiFN   (05.07.2006 в 09:42)   письмо автору
 
 

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

   
 
 автор: hars   (05.07.2006 в 09:47)   письмо автору
 
   для: RiFN   (05.07.2006 в 09:42)
 

CONCAT(str1,str2,...)
Возвращает строку, являющуюся результатом конкатенации аргументов. Если хотя бы один из аргументов равен NULL, возвращается NULL. Может принимать более 2 аргументов. Числовой аргумент преобразуется в эквивалентную строковую форму:

mysql> SELECT CONCAT('My', 'S', 'QL');
        -> 'MySQL'
mysql> SELECT CONCAT('My', NULL, 'QL');
        -> NULL
mysql> SELECT CONCAT(14.3);
        -> '14.3'

CONCAT_WS(separator, str1, str2,...)
Функция CONCAT_WS() обозначает CONCAT With Separator (конкатенация с разделителем) и представляет собой специальную форму функции CONCAT(). Первый аргумент является разделителем для остальных аргументов. Разделитель, так же как и остальные аргументы, может быть строкой. Если разделитель равен NULL, то результат будет NULL. Данная функция будет пропускать все величины NULL и пустые строки, расположенные после аргумента-разделителя. Разделитель будет добавляться между строками, подлежащими конкатенации:

mysql> SELECT CONCAT_WS(",","First name","Second name","Last Name");
        -> 'First name,Second name,Last Name'

mysql> SELECT CONCAT_WS(",","First name",NULL,"Last Name");
        -> 'First name,Last Name'

   
 
 автор: Trianon   (05.07.2006 в 09:54)   письмо автору
 
   для: RiFN   (05.07.2006 в 09:42)
 

В принципе, в MySQL есть агрегатная функция GROUP_CONCAT().
Но у нее есть ограничение на размер результата.
Так что смотрите сами, её применение может выйти боком.

   
 
 автор: RiFN   (05.07.2006 в 10:12)   письмо автору
 
   для: Trianon   (05.07.2006 в 09:54)
 

спасибо большое за развернутый ответ. вроде мысль поймал - пойду пробовать.

   
 
 автор: RiFN   (05.07.2006 в 10:30)   письмо автору
 
   для: RiFN   (05.07.2006 в 10:12)
 

что-то у меня не получается такая выборка :(
подскажите плиз, где я не прав:
в таблице всего два поля catid и artid

$cat_id = $db_sql->sql_query('SELECT CONCAT_WS(",","SELECT catid FROM $art_childlcat WHERE artid='4'")');

выдает parse error, unexpected T_LNUMBER
что это???

   
 
 автор: hars   (05.07.2006 в 10:36)   письмо автору
 
   для: RiFN   (05.07.2006 в 10:30)
 


$cat_id = $db_sql->sql_query('SELECT CONCAT_WS(",",SELECT catid FROM $art_childlcat WHERE artid="4")');

   
 
 автор: cheops   (05.07.2006 в 10:39)   письмо автору
 
   для: RiFN   (05.07.2006 в 10:30)
 

Если вы используете одинарные кавычки в строке, заключенной в одинарные кавычки - их следует экранировать
<?php
$cat_id 
$db_sql->sql_query('SELECT CONCAT_WS(",","SELECT catid FROM $art_childlcat WHERE artid=\'4\'")');
?>

   
 
 автор: RiFN   (05.07.2006 в 10:58)   письмо автору
 
   для: cheops   (05.07.2006 в 10:39)
 

возможно я не правильно вопрос поставил или че-то недопонимаю. спасибо за замечание - заработало, но он мне в результате выдает "SELECT catid ..." в общем то, что стоит в кавычках... это не совсем то.
моя цель - это вывод из таблицы (с двумя колонками catid и artid) значения catid в тех строках где artid равно например '4'.... и эти значения должны выводиться строкой значений через запятую.
в общем есть запрос:

$cat_id = $db_sql->sql_query("SELECT catid FROM $art_childlcat WHERE artid='".$artid."'");
while($a = $db_sql->fetch_array($cat_id))
echo $a['catid'].",";

тут все работает
а что мне с ним сделать чтоб на выходе из "db_sql->sql_query...." уже была строка с запятыми? помогите плиз!

   
 
 автор: Trianon   (05.07.2006 в 11:23)   письмо автору
 
   для: RiFN   (05.07.2006 в 10:58)
 

Еще раз. Фактически, Вы хотите выполнить

$db_sql->sql_query("SELECT GROUP_CONCAT(catid SEPARATOR ',') FROM $art_childlcat WHERE artid = $artid");
только результат не гарантирован из-за того, что
а) Ваш сервер может этот запрос и не понять, но это полбеды...
б) запрашиваемые данные могут превысить размер выделенного дял GROUP_CONCAT буфера.
Советую не выеживаться, а пройтись по resultset-у циклом.

   
 
 автор: RiFN   (05.07.2006 в 11:38)   письмо автору
 
   для: Trianon   (05.07.2006 в 11:23)
 

спасибо, пожалуй на этом и остановимся.... буду циклы строить...

   
Rambler's Top100
вверх

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