DC-SWAT Forum

Полная версия: Помощь с Мускулом
Вы просматриваете yпpощеннyю веpсию форума. Пеpейти к полной веpсии.
Страниц: 1 2
Сват нужна твоя помощь.
Вот создают я таблицу запроосом в майсикъэл.

CREATE TABLE PIDORS (PIDOR_Name char(15) PRIMARY KEY);

т.е. таблицу "пидоры" с одноим столбцом (row'ом) Пидор_нейм длиной 15 символов и говорю что это у меня будет первичным ключом (хотя это не важно пока).
Вот, оно создаёт таблицу, и пишет, что 0 rows affected каждый раз!
как же это так?
Приходится дополнительно писать alter, insert... Почему так?
Почему оно сразу не может создать мне таблицу с нужными мне полями?
замахался уже...
Должно работать.

PHP код:
DROP TABLE IF EXISTS `table_name`;
CREATE TABLE `table_name` (
  `
namevarchar(32NOT NULL,
  
PRIMARY KEY  (`name`)
ENGINE=MyISAM

Сообщение вида "0 rows affected" вообще к созданию таблиц в принципе не отностится. Оно выводит какое количество записей в таблице обработано.
Вообще столько вопросов по этому MySql возникло...
Если я создаю таблицу, например users, и в ней хочу:
1. Чтобы поле айди было беззнаковым.
Как это сделать? Или нельзя?
2. Праймари кей. Я делаю поле айди первичным ключом для этой таблицы. Нужно мне тогда еще помимо PRIMARY KEY писать UNIQUE и NOT NULL или это и так подразумевается?
3. Как сделать так, чтобы первичным ключом было не одно поле а сразу два? (и более?)
4. Чем тип char отличается от varchar? (variable char?)
5. Как сделать запрет на добавление записей id которых меньше единицы?
Спасибо.
Охеренеть на него вообще никакие внушения не действуют, пишу PRIMARY KEY id и name все равно добавляет записи с одинаковым именем... охренеть...
Первичный ключ может быть только один, но он может быть составным типа:
PHP код:
PRIMARY KEY  (`id`,`user_name`) 
По поводу char и varchar - http://www.weblibrary.biz/mysql/tipy-sto.../tipy-char

Беззнаковое поле - unsigned
Поле id инкрементится само, поэтому его не нужно добавлять вручную вовсе, добавляй только user_name.

PHP код:
DROP TABLE IF EXISTS `table_name`;
CREATE TABLE IF NOT EXISTS `table_name` (
  `
idint(11unsigned NOT NULL AUTO_INCREMENT,
  `
user_namevarchar(32NOT NULL,
  
PRIMARY KEY (`id`),
  
UNIQUE KEY `user_name` (`user_name`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
Спасибо большое.
Вот еще скрипт, никак не хочет работать:

PHP код:
<HTML>
<
HEAD>
<
TITLE>
<?
php
$c
=mysql_connect('localhost','user32','dsfdsf') or die('1'.mysql_error());
$q=mysql_query("use forum") or die('2'.mysql_error());
$q=mysql_query("select * from describe_forum") or die('3'.mysql_error());
$r=mysql_fetch_row($q) or die('4'.mysql_error());
echo 
$r[2];
?>
</TITLE>
</HEAD>
<BODY>

<?  
        
for($i=0$i<10$i++)
        {
            echo 
'<BR>';
        }
        echo 
'<H1>lol</H1>';?>

</BODY>
</HTML> 

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

[Изображение: 6E2KBxcx.gif]
http://s2.ipicture.ru/uploads/20110102/6E2KBxcx.gif
Так ты указываешь на не существующий индекс в массиве, у тебя же 1 колонка там, поэтому нужно выводить:
PHP код:
echo $r[0]; 

А чтобы добраться до нужного ряда с колонками, вызывай в цикле:
PHP код:
mysql_fetch_row($q); 

...пока не доберешся до нужного. А вообще странная таблица... С одной колонкой таблица = бессмысленная таблица.
Уже разобрался с этим... Теперь у меня проблемы с кодировками.

Мне от нее и нужен один столбец. Я использую ее как хранилище данных а не как хранилище.
У тебя в этой таблице нет зацепки, как достать нужное название, что в итоге приводит к хардкоду, где тебе необходимо достать все записи и потом в цикле бежать до нужной, это очень позорно Smile
А так не придется бежать? Или мне по столбцу создавать для каждого параметра,при том что он всего один?)
Все равно придется вызывать
PHP код:
mysql_fetch_row($query); 
пока не выберу нужный результат, так что...
Или ты знаешь способ обойти это?

[Изображение: Bl3fXJf2.jpg]
Если бы у таблицы describe_forum было бы хотябы поле ID, тебе достаточно было бы указать его в запросе (where id=1) и при первом же (да и единственном) вызове mysql_fetch_row($query); ты бы получил нужную запись.

По поводу остального я не понял что ты конкретно хочешь. Вытащить просто список постов из определенной темы?
Не смотри, короче:
Мне надо показать напротив форума в таблице ту тему, изменения в которую (в данном форуме) заносились последними. Как это лучше сделать?
Кстати гемморой:
Запрос:
PHP код:
$q=mysql_query('select forum_name from forums where forum_id='.$forum_id); 

инструкция
PHP код:
echo mysql_fetch_row($q); 
выводит Array,
а для того чтобы вывести текст приходится делать такое извращение:

PHP код:
for($i=0$i<18$i++)
          echo 
$r[$i]; 

где $r - результат фетч_роу от запроса.
mysql_fetch_row($q); возвращает индексный массив с полями.
юзай mysql_fetch_assoc($q); и будешь выводить так echo $r['forum_name'], хотя в первом случае у тебя должно быть тоже все просто, типа echo $r[0]; не понимаю откуда у тебя там 18 полей.

По поводу вывода темы, т.е. входной параметр это forum_id так?
Так вот оно возвращает мне не целый рядок со значениями а только значение первого рядка одного столбца и чтоб его вывести нужно писать такую вот хрень, ибо без этого выведет только 5 первых символов там и т.п.

Да, forum_id и только.

P.S. не хочу жаловаться но честно уже устал от этого php как-то...
Тебе просто нужно взять книжку и почитать обо всем этом, хотябы основы, тогда все станет ясно.

PHP код:
select p.post_text as postp.timestamp as ts from table_posts as p
left join table_threads 
as t on t.thread_id p.thread_id
where t
.forum_id 1 order by ts desc 

PHP код:
select p.post_text as postp.timestamp as tsf.forum_name as forum from table_posts as p
left join table_threads 
as t on t.thread_id p.thread_id
left join table_forums 
as f on f.forum_id t.forum_id
where t
.forum_id 1 order by ts desc 
Да уже пройденный этап, спасибо за совет Сват.
Дело не в самих запросах ибо в запросах я вроде неплохо шарю, сложность в самой архитектуре таблиц. Ведь тред - это не только тред сам по себе, к нему же еще и пост какой-нибудь привязан. Т.е. когда создаешь новый тред обязательно нужно кроме названия темы и описания ввести еще какой-нибудь текст... Вот с этим у меня сейчас проблема.

И вот еще.
Зачем на многих форумах указывает еще кроме идентификатора поста для Showpost.php еще и его номер относительно темы? Ведь идентификатор глобальный и к треду (сам по себе) никак не привязан (в глобальном контексте). Я так понимаю это создано просто для удобства, ибо никакой смысловой нагрузки для сценария вывода поста не несет, ибо номер поста относительно треда важен только в контексте самой темы, не так ли?
Я вообще не понимаю зачем еще айди поста передавать, ведь ты заходишь в тему, где много постов, а значит нужно передавать только айди темы чтобы показать саму тему и ее посты. Как пример щас в адресную строку глянь.
Какие у тебя проблемы при создании то? Ну когда создаешь тему делай еще и пост и привязывай его к теме этой... по моему все элементарно.
Сват не в курсе какие еще есть методы поиска средствами SQL помимо select / like и regexp?
Мне нужно организовать поиск по тексту записей в таблице, не знаю как лучше сделать.
Если ты ищешь мощный инструмент для полнотекстового поиска, то можно посмотреть в сторону Sphinx - http://sphinxsearch.com
Да не мне что-то простое для курсового проекта. Но все равно спасибо.
Страниц: 1 2
URL ссылки