Есть пример xml ки и есть база данных mySQL. Вот сам пример Код (Text): <root path="bid_image" thumbnailpath="small_image" > <fo p="111" d="28" m="12" y="2009"> <fi p="P5160002.jpg" /> <fi p="P5160005.jpg" /> <fi p="P5210009.jpg" /> <fi p="P5210010.jpg" /> <fi p="P5210013.jpg" /> </fo> </root> а вот так выглядит бд coment = "111" = имя альбома. Как написать такой SQL запрос, который бы выводил такого типа вещи.[/code]
ну распиши подробнее: что есть, что хочешь, что умеешь и знаешь из этого. Тут сложного ничего. Просто не понятно чего ты хочешь, и чего ты в этом не понимаешь.
что то типу require_once("db.php"); $db = new db_layer(); $db->getConnection(); $qry = "ТУТ КАКО ТО ЗАПРОС СПЕЦЫФИЧЕСКИЙ'"; $db->execute_sql($qry,$result,$error_msg); if($error_msg <> "") { echo $error_msg;die; } else {$db->execute_sql($qry,$result,$error_msg);} while($curs_row = mysql_fetch_object($result)) { echo '<root path="bid_image" thumbnailpath="small_image" > <fo p="'.$curs_row->coment.'" тут каким то образом вывести дату в виде(d="28" m="12" y="2009")> <fi p="'.$curs_row->url.'" /> </fo> </root>'; } Ну а если альбомов будет много с каждым новым альбомом повторять <fo p="'.$curs_row->coment.'" тут каким то образом вывести дату в виде(d="28" m="12" y="2009")> <fi p="'.$curs_row->url.'" /> </fo> примерно так
нет. ты сформулируй, что ты хочешь получить в итоге. =) Тогда и будет понятно, что ты хочешь увидеть под "запрос спецыфический" Что ты хочешь получить в результате? Значения полей? Каких? При каких условиях? Какие отбросить? Какие выбрать?
хорошо.. При таблице <root path="bid_image" thumbnailpath="small_image" > <fo p="albums_1" d="01" m="04" y="2010"> <fi p="PB150003.JPG" /> <fi p="PB180011.JPG" /> <fi p="PB180030.JPG" /> </fo> </root> А при таблице <root path="bid_image" thumbnailpath="small_image" > <fo p="albums_1" d="01" m="04" y="2010"> <fi p="PB150003.JPG" /> <fi p="PB180011.JPG" /> </fo> <fo p="albums_2" d="01" m="04" y="2010"> <fi p="PB180030.JPG" /> </fo> </root>
ну ок. По-человечески это звучит так: "я хочу выбрать сначала фотки из одного альбома. А потом из другого" Я не буду писать запросы, но сформулирую их тебе на русском. думаю не составит труда переписать на мускульный язык. Вобще, такой подход, мне кажется, тебе поможет и в дальнейшем. Во-первых надо определиться, нужны ли вобще все строки, которые тебя интересуют. Может на самом деле тебе только кажется, что они все тебе нужны. И самое первое, что стоит отсечь - это по датам. Или наоборот - не стоит. Во-вторых, если ты хочешь выбрать данные по альбомам, то есть два подхода. Первый - это то, чем ты мучаешься - написать такой запрос, чтобы выдал все сразу и так как надо. Второй, по-проще - сначала спросить у базы, какие вобще есть альбомы. Т.е. сначала я бы тебе рекомендовал сделать один запрос - SELECT DISTINCT из столбика по альбомам. Он вернет тебе список альбомов, без повторений. Т.е. будет конкретно: альбом1 и альбом2. Заносишь это в массив, ну например $albums. Результат первого этапа будет выглядеть так: $albums[0]='albums_1' и $albums[1]='albums_2'. После, ты в цикле спрашивает у БД, мол, покажи мне url всех строк в которых coment = albums_1, и т.п. Примерно так: foreach ($albums as $album) { echo '<fo p="'.$album.'">'; 1) тут запрос к БД такой: "SELECT url FROM твоя таблица WHERE coment='$album'" 2) вот и распотрониваешь результат тут в цикле. echo '<fi p="'.$row['url'].'" />'; А в конце - echo '</fo>'; } Готово. Но. Ты непраильно спроектировал это все дело, и поэтому у тебя будут сложности например с определением даты альбома. Если конечно не принять во внимание такое условие, чтобы все фотки в альбом добавлялись сразу в один день. Можно конечно брать младшую дату фотки, но если фотки потрут - младшая дата тоже может съехать. Пример: чел создал альбом в сентябре, накидал фоток. Потом в ноябре уже докинул еще фоток, а сентябрьские потер. Тогда ему будет писаться, что альбом создан в ноябре. И он будет злиться. Делать надо так: Первая таблица - список альбомов. 1. id 2. Дата создания. 3. Название альбома. 4. - по желанию - дата последнего изменения в альбоме. Там... Добавилась новая фотка - обновили эту дату. Вторая таблица - список фоток: 1. id 2. дата создания. 3. id альбома, к которому приписана фотка. id из первой таблицы, значит. 4. Ну дальше тут все, что пожелаешь. Имя фотки 5. Коментарий к фотке. Тогда процесс будет сроиться по простой схеме. Сначала выбираешь из первой таблицы альбомы. Потом выбираешь из второй фотки, приписанные к альбому. И все параметры будут у тебя верными. Панимай? =)
igordata Ну впринципе я так и думал делать так оно и есть.... но, прабл в том как вывести дату по од дельности. в таблице он в виде 2010-04-01 а в результате нужно получить такую запись. d="01" m="04" y="2010" Делаю админку для http://wir-wolf.org.ua/
Дак какого хрена она там в таком виде-то? =) Я лично храню даты в формате Unix Timestamp в поле Integer. Выборку делаю по этому полю, манипуляции наиудобнейшие, легко работать с функцией date в РНР, сортировка тоже нативная. Уж увы, не полюбились мне ни поля типа Date/Datetime, ни Timestamp.
либо парсиь на пхп, либо, если дата в DATE хранится, то DAY(), MONTH(), YEAR() никто не отменял и вообще http://dev.mysql.com/doc/refman/5.1/en/ ... tions.html
я - про джоины знаю. Развитие должно быть поступательным. Человек не может понять вобще, что в эти джоины джоинить, и откуда что выбирать. =) Джоины, я чую, будут уже в следующем топике =)
Luge, чтот я с датой я не понял, куда ее совать то,дай какой нибудь пример, а дальше я розберусь\ igordata, не через foreach ($albums as $album) PHP: <?php require_once("admin/db.php"); $db = new db_layer(); $db->getConnection(); header('Content-type: text/xml') echo '<root path="bid_image" thumbnailpath="small_image" >'; $qry = "SELECT DISTINCT coment,date from albums ORDER BY date ASC"; $db->execute_sql($qry,$result,$error_msg); if($error_msg <> "") { echo $error_msg;die; } else {$db->execute_sql($qry,$result,$error_msg);} while($row = mysql_fetch_object($result)){ echo '<fo p="'.$row->coment.'" d="28" m="12" y="2009">'; $qry2 = "SELECT url from albums where coment='".$row->coment."'"; $db->execute_sql($qry2,$result2,$error_msg); if($error_msg <> "") { echo $error_msg;die; } else {$db->execute_sql($qry2,$result2,$error_msg);} while($row2 = mysql_fetch_object($result2)){ echo '<fi p="'.$row2->url.'" />'; } echo '</fo>'; } echo '</root>'; ?>
[sql]SELECT DAY(my_date) as `day`, MONTH(my_date) as `month`, YEAR(my_date) as `year` FROM `table` [/sql]