[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод из базы через запетую
Гена
например у меня в базе есть таблица category и там есть строка cat в это строке находятся записи 1,2,3.
не подскажите как мне вывести их по отдельности?
ну например у меня сеЙчас вот такоЙ запрос
SELECT id  FROM category WHERE cat='$cat'


например когда я вожу в cat только одно значение без запетого то он мне выводит но когда с запетыми то не выводит, помогите пожалуЙста мне с этоЙ проблемоЙ.
спс за ранее



Спустя 11 минут, 45 секунд (15.03.2011 - 21:11) neadekvat написал(а):
Что-то вы намудрили с определениями.
Приведите нормально структуру и записи в ней, лучше дампом.
А также то, что надо достать.

Спустя 23 секунды (15.03.2011 - 21:12) alex12060 написал(а):
Тебе как надо?
Несколько записей вытаскивать?
Использую WHERE IN

Спустя 2 минуты, 25 секунд (15.03.2011 - 21:14) nugle написал(а):
for($i=0, $i<6, $i++)
{echo sub_str($row['cat'], 0, $i);}

Спустя 4 минуты, 34 секунды (15.03.2011 - 21:19) Гена написал(а):
CREATE TABLE IF NOT EXISTS `lessons` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`meta_d` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`meta_k` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`date` date NOT NULL,
`short_discription` text COLLATE utf8_unicode_ci NOT NULL,
`full_discription` text COLLATE utf8_unicode_ci NOT NULL,
`author` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`cat` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`view` int(10) NOT NULL,
`hovedside` int(1) NOT NULL,
`komment` int(1) NOT NULL,
`voit` int(1) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=53 ;

--
-- Дамп данных таблицы `lessons`
--

INSERT INTO `lessons` (`id`, `title`, `meta_d`, `meta_k`, `date`, `short_discription`, `full_discription`, `author`, `cat`, `view`, `hovedside`, `komment`, `voit`) VALUES

(1, 'Test kategori', 'zxcv', 'alle test', '0000-00-00', '<p>text text</p>', '<p>text text</p>', 'Guvas', '5 ,6 ,8 ', 0, 1, 1, 1);


если посмотреть колонку cat то увидете что там '5 ,6 ,8 ' .
мне нужно чтоб они выводились все.
вот сам код запроса.

$result = mysql_query ("SELECT id,title,short_discription,date,author,view FROM lessons WHERE cat='$cat',$db); 

Спустя 1 минута, 50 секунд (15.03.2011 - 21:20) alex12060 написал(а):

$cat = isset($_GET['cat']) ? $_GET['cat'] : 1;

if (!preg_match("/[0-9,]/", $cat)) die("Please, don't change a GET string!");

$sql = mysql_query("SELECT id FROM category WHERE cat IN ('".mysql_real_escape_string($cat)."')") or die(mysql_error());

// some actions

Спустя 2 минуты, 57 секунд (15.03.2011 - 21:23) Гена написал(а):
Цитата (alex12060 @ 15.03.2011 - 18:12)
Тебе как надо?
Несколько записей вытаскивать?
Использую WHERE IN

пробывал не помогает, даже ошибку выдает((((

Спустя (15.03.2011 - 21:23) neadekvat написал(а):
Ок, но как именно они должны выводится?

Спустя 3 минуты, 20 секунд (15.03.2011 - 21:27) imbalance_hero написал(а):
alex12060
Зачем для чисел mysql_real_escape_string? Тут использовать надо int.
Что за ошибку? Может грамматическую?

Спустя 6 минут, 19 секунд (15.03.2011 - 21:33) alex12060 написал(а):
imbalance_hero

Ага, конечно wink.gif

Цитата
например когда я вожу в cat только одно значение без запетого то он мне выводит но когда с запетыми то не выводит, помогите пожалуЙста мне с этоЙ проблемоЙ.


Он текст с запятыми посчитает как string и вернет первое int значение перед string

Спустя 7 минут, 17 секунд (15.03.2011 - 21:40) neadekvat написал(а):
alex12060, насколько я помню, в IN() могут быть переданы только числовые значения через запятую.

Спустя 2 минуты, 12 секунд (15.03.2011 - 21:42) alex12060 написал(а):
neadekvat

Я знаю это, но ведь если к тебе пришла инфа по ГЕТ, а в БД, например, идет выборка по автоинкрементному ид, который сам по суте - инт, то что, всегда надо конвертировать в число? Атнюдь)

Хотя, можнт в этом случае я и заблуждаюсь, так как нет доступпной БД.
Сейчас проверю твою мысль)

Спустя 2 минуты, 41 секунда (15.03.2011 - 21:45) neadekvat написал(а):
Цитата (alex12060 @ 15.03.2011 - 18:42)
если к тебе пришла инфа по ГЕТ

Стоп, какой ГЕТ? Тут ни про какой ГЕТ и не речи не было.
К тому же, если уж что-то из ГЕТа пришло - то должно быть в числовом формате, и обработать в скрипте это надо соответствующим образом. И уж потом числа объединить в запрос.

Спустя 1 минута, 11 секунд (15.03.2011 - 21:46) m4a1fox написал(а):
Интересная у вас полемика smile.gif Но все же... Я думаю автор имеет ввиду, что у него $ cat это что то типо родительской. Ну тоесть например в одной таблице есть cat а вот эта таблица (как я бы сделал id_cat). Вот. И он хочет вытащить значения, если $cat = $id_cat? ИМХО. Скорее я не прав, но все же...

Спустя 16 секунд (15.03.2011 - 21:47) Гена написал(а):
Цитата (alex12060 @ 15.03.2011 - 18:20)

$cat = isset($_GET['cat']) ? $_GET['cat'] : 1;

if (!preg_match("/[0-9,]/", $cat)) die("Please, don't change a GET string!");

$sql = mysql_query("SELECT id  FROM category WHERE cat IN ('".mysql_real_escape_string($cat)."')") or die(mysql_error());

// some actions

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

Спустя 31 секунда (15.03.2011 - 21:47) m4a1fox написал(а):
neadekvat
Не обязательно GET = число, может и вместе быть...

Спустя 2 минуты, 33 секунды (15.03.2011 - 21:50) alex12060 написал(а):
Дошло, я понял)

В таком случае, надо подходить к проблеме с другой стороны)

Спустя 49 секунд (15.03.2011 - 21:50) m4a1fox написал(а):
Можно так. Создать массив со значением, и потом просто подставлять его, если хоть одна из массива совпадает тогда вынимать.

Спустя 25 секунд (15.03.2011 - 21:51) neadekvat написал(а):
В общем, насколько я понимаю, здесь ошибка в архитектуре.
Вместо двух таблиц:
cats (категоии)

cat_id name
1 категория 1
2 категория 2

lessons (уроки, видимо)

les_id name cat
1 урок1 1,2

Должно быть три таблицы:

cat_id name
1 категория 1
2 категория 2

lessons (уроки, видимо)

les_id name
1 урок1

les2cat
les_id cat_id
1 1
1 2

Спустя 56 секунд (15.03.2011 - 21:52) neadekvat написал(а):
m4a1fox, я не говорю, как может быть, я говорю, как должно быть. А вообще, как выясняется, ни о каких ГЕТах речи не идет. Речь о совсем другой сущности и ее свойствах.

Спустя 19 секунд (15.03.2011 - 21:52) alex12060 написал(а):
Не, слишком сложно. Там проще поступить можно, просто вытащить из таблицы, обработать цифры и собрать в ИН.

Спустя 6 секунд (15.03.2011 - 21:52) m4a1fox написал(а):
neadekvat
Да. Точняк. Это реально легче.

Спустя 1 минута, 11 секунд (15.03.2011 - 21:53) m4a1fox написал(а):
Интересно, а где автор темы? Пропал куда-то smile.gif

Спустя 1 минута, 18 секунд (15.03.2011 - 21:55) m4a1fox написал(а):
alex12060
Ну прикиним. Вот Вы вытащили цифры, засунули их в массив, но ведь потом перебирать все равно на предмет совпадения?

Спустя 51 секунда (15.03.2011 - 21:56) neadekvat написал(а):
alex12060, нет, не проще. Проще именно так, как показал я, потому что так надо делать в подавляющем большинстве случаев. Не я это придумал, кстати :)
Посмотрите, какие тут с вашим "проще" предлагают идеи. И это называется "проще"?

Спустя 4 минуты, 59 секунд (15.03.2011 - 22:01) Гена написал(а):
Цитата (neadekvat @ 15.03.2011 - 18:51)
В общем, насколько я понимаю, здесь ошибка в архитектуре.
Вместо двух таблиц:
cats (категоии)

cat_id name
1 категория 1
2 категория 2

lessons (уроки, видимо)

les_id name cat
1 урок1 1,2

Должно быть три таблицы:

cat_id name
1 категория 1
2 категория 2

lessons (уроки, видимо)

les_id name
1 урок1

les2cat
les_id cat_id
1 1
1 2

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

Спустя 1 минута, 8 секунд (15.03.2011 - 22:02) Гена написал(а):
Цитата (m4a1fox @ 15.03.2011 - 18:50)
Можно так. Создать массив со значением, и потом просто подставлять его, если хоть одна из массива совпадает тогда вынимать.

не могли бы вы показать в коде как это сделать?

Спустя 10 секунд (15.03.2011 - 22:02) alex12060 написал(а):
Ну ТС придется прееделать все)
Хотя, посмотрим)

Я набросал конкретно по вопросу)
Криво правда, но посомтрим)


$cat = '1, 3, 5';

if (!preg_match("/[0-9,]/", $cat)) die("Please, don't change a string!");

$g = explode(", ", $cat);

foreach($g as $num) $where .= (int)$num.', ';

$sql = mysql_query("SELECT title FROM test WHERE id IN (".substr($where, 0, strlen($where) - 2).")") or die(mysql_error());

if (mysql_num_rows($sql) == 0) die('We have 0 results!');

while($z = mysql_fetch_array($sql, MYSQL_NUM)) echo $z[0]."<br />\n\r";


З.Ы не нападайте на субстр, я не хочу сейчас думать, как другим путем обкарнать последние точку с запятой)

Спустя 1 минута, 26 секунд (15.03.2011 - 22:03) neadekvat написал(а):
Цитата (Гена @ 15.03.2011 - 19:01)
тока вот мне придется все заново переписывать.

Представьте, что вы начали строить трехэтажный коттедж. Поставили вы уже целый этаж. И тут вы узнаете, что фундамент должен быть из бетона, а не из дерева.
У вас есть выбор - развалить первый этаж, залить нормальный фундмаент и строиться, либо достроить коттедж, а потом в скором времени ломать его и все равно начинать заного.
Вот только наверное уж один этаж сломать проще и дешевле, чем три? Хотя, дело ваше.

Спустя 1 минута, 55 секунд (15.03.2011 - 22:05) neadekvat написал(а):
alex12060, что вы делаете? Вы проверяли код?

Спустя 2 минуты, 8 секунд (15.03.2011 - 22:07) alex12060 написал(а):
Проверял.

Спустя 5 минут, 11 секунд (15.03.2011 - 22:12) neadekvat написал(а):
Цитата (alex12060 @ 15.03.2011 - 19:07)
Проверял.

Как же это вы так проверяли? Ваша регулярка, например ("/[0-9,]/"), пропустит любой набор символов, лишь бы там хотя бы раз встречалась цифра или запятая.
Цикл можно заменить на array_map, к тому же в итоге у вас получится следующая картина:
$where = '1, 2, 3, ';

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

Спустя 3 минуты, 44 секунды (15.03.2011 - 22:16) alex12060 написал(а):
Да, ты прав)
В топку, спать пошел я лучше)


Спустя 2 минуты, 34 секунды (15.03.2011 - 22:19) Гена написал(а):
у меня голова кругом пошла((((
не знаю даже с чего начать и что менять((((

кто сможет разобраться и обьяснить как и что мне нужно тут исправить?

<?php
session_start();
include("blocks/db.php");
if(isset($_GET['cat'])){$cat = $_GET['cat'];}
include("blocks/check.php");
$resultes = mysql_query("SELECT * FROM options",$db);
$myrowes = mysql_fetch_array($resultes);
$result = mysql_query ("SELECT * FROM categories WHERE id='$cat'",$db);
$myrow = mysql_fetch_array($result);

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Template Design by TheWebhub.com | http://www.thewebhub.com | Released for free under a Creative Commons Attribution-Share Alike 3.0 Philippines -->
<html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<
title><?php echo $myrow['title'];?></title>
<
meta name="keywords" content="<?php echo $myrow['meta_k'];?>" />
<
meta name="description" content="<?php echo $myrow['meta_d'];?>" />
<
link href="style.css" rel="stylesheet" type="text/css" media="screen" />
<
script type="text/javascript" src="js/tilt-1.0.min.js"></script>
<
script>
$(function() {
$('#div1').tilt();
});
</
script>
<
script type="text/javascript" src="js/jquery.min.js"></script>
</
head>
<
body>
<?php include("blocks/kategories.php");

$result77 = mysql_query("SELECT pages FROM options", $db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["pages"];
@$page = $_GET['page'];
$result00 = mysql_query("SELECT COUNT(*) FROM lessons WHERE cat='$cat'");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
$total = (($posts - 1) / $num) + 1;
$total = intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;

?>
<div id="content">
<
div id="content-wrapper-top">
<
div id="content-wrapper-btm">
<
div id="left">

<
table width="246%" border="0" valing="top">
<
tr>
<
td width="73%" valign="top"><a href="index.php"><img src="images/logo.png" width="750" border="0"></a><table width="100%" height="41" border="0">
<
tr>
<
td valign="top"><table width="100%" border="0" align="center">
<
tr>
<
td valign="top"><div id="content">
<
div id="content-wrapper-top">
<
div id="content-wrapper-btm">
<
div id="left">

</
td>
</
tr>
<
tr>
<
td valign="top">

<
div id="div1">

<?php
if($myrowes['sort_nyheter'] == 0){
$result = mysql_query ("SELECT id,title,short_discription,date,author,view FROM lessons WHERE cat='$cat' ORDER BY id LIMIT $start, $num",$db);
$myrow = mysql_fetch_array($result);
}
if($myrowes['sort_nyheter'] == 1){
$result = mysql_query ("SELECT id,title,short_discription,date,author,view FROM lessons WHERE cat='$cat' ORDER BY id DESC, date DESC LIMIT $start, $num",$db);
$myrow = mysql_fetch_array($result);
}
do{
printf("<div id='right'>
<div class='post_titel'>
<div class='postlis'><a href='view_post.php?id=%s'>%s</a></div>
<p>%s</p><br><br>
<div class='boardlists'>
Dato: <b>%s</b> Visning: <b>%s</b> Autor: <b>%s</b></div>
</div>
</div>"
,$myrow["id"],$myrow["title"],$myrow["short_discription"],$myrow["date"],$myrow["view"],$myrow["author"]);
}
while($myrow = mysql_fetch_array($result));

?>

</div>
<
center><?php include("blocks/page_navigator.php"); ?></center>
</
td>
</
tr>
</
table></td>
</
tr>
</
table></td>
</
tr>
</
table>
</
div>
<
div style="clear: both;"> </div>
</
div>
</
div>
</
div>
<?php include("blocks/footer.php"); ?>
</body>
</
html>

Спустя 4 минуты, 16 секунд (15.03.2011 - 22:23) neadekvat написал(а):
Вы сами все это писали или взяли чей-то код?

Спустя 2 минуты, 10 секунд (15.03.2011 - 22:25) Гена написал(а):
сам писал, только по учебнику, и методом тыканя, только строго не судите моЙ код))) я только не давно начал)))

Спустя 4 минуты, 2 секунды (15.03.2011 - 22:29) neadekvat написал(а):
Гена, не ломитесь вперед. Чтобы продолжать путь, надо быть уверенным, что на текущий момент усвоено все.
Сделайте бекап текущей структуры и копию имеющегося кода.
Затем внесите изменения в базу данных (я надеюсь, вы поняли, что я там показал?), а затем, исходя из этой структуры, начините писать код и запросы.

Спустя 2 часа, 15 минут, 20 секунд (16.03.2011 - 00:45) imbalance_hero написал(а):
Гена
Неправильная постановка сразу идёт, поэтому и калабурда.
Есть у тебя строка в базе такого вида для новостей:
1) 1
2) 1,2
3) 2,3,4
4) 1,5,6
то для запроса надо использовать LIKE %$var%, то есть поиск по полю.
А в целом такую связь необходимо организовывать через связующую таблицу, итого 3 таблицы: КАТЕГОРИЯ, СТАТЬЯ, СВЯЗУЮЩАЯ
В связующей: id,id_cat,id_lesson , тогда можно несколькими записями обозначить, что одна статья держится на нескольких категориях, это и есть внешние ключи в таблицах.

Спустя 12 часов, 22 минуты, 56 секунд (16.03.2011 - 13:08) Лена написал(а):
Только первую страницу почитала. А тут уже оказывается, целых три. Удалите пост.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.