Forum Webscript.Ru

Общие => Базы данных => Тема начата: новичок от 15 Июля 2003, 13:17:00

Название: SELECT определеную строку
Отправлено: новичок от 15 Июля 2003, 13:17:00
Вопрос, есть строки:
------------------------------
name      | nick
------------------------------
sasha      | ibsn
anton     | bostaf
kozel      | sam takoi
...

Как мне выбрать строку по номеру строки, допустим в переменой $n хранится номер строки (в файле это делается так: $file[$n]) а как это в mysql делается???
Предпалагаю, что LIMIT $n, 1

Может есть другаю функция???
Название: SELECT определеную строку
Отправлено: Xander от 15 Июля 2003, 13:29:24
новичок
Кури доки.  В базе данных нет такого понятия, как "номер строки". Для того, что ты хочешь сделать, тебе надо явно завести в таблице атрибут ID и выбирать по нему.

А вообще вопросы твои абсолютно идиотские, и показывают, что ты не удосужился заглянуть хоть в какую-нибудь документацию по MySQL, и понять, как это работает.
Название: SELECT определеную строку
Отправлено: новичок от 15 Июля 2003, 13:35:22
Я не могу создавать ID!!!

Тогда придется LIMIT =(
Название: SELECT определеную строку
Отправлено: Yukko от 15 Июля 2003, 13:41:34
Цитировать
новичок:
Я не могу создавать ID!!!

Бедняжка :( налейте ему водки...
Название: SELECT определеную строку
Отправлено: Xander от 15 Июля 2003, 13:44:03
новичок
LIMIT тебе не поможет, потому, что порядок строк в базе не фиксирован, и может меняться с добавлением новых.
Название: SELECT определеную строку
Отправлено: Xander от 15 Июля 2003, 13:44:49
Yukko
[off]Маленький он еще, водку пить. Ему ее и продавать-то не скоро будут.
[/off]
Название: SELECT определеную строку
Отправлено: новичок от 15 Июля 2003, 13:45:48
Тогда вопрос, как мне избежать чтобы id при update стновились такими:
1
2
4
5
7
????
Название: SELECT определеную строку
Отправлено: Макс от 15 Июля 2003, 13:55:10
структуру таблицы (просто мне интересно как у тебя ID определено) и текст UPDATE-запроса покажи
Название: SELECT определеную строку
Отправлено: Xander от 15 Июля 2003, 13:59:54
новичок
ты боишься того, что id будут идти не по порядку?
Они и не должны.
Название: SELECT определеную строку
Отправлено: Yukko от 15 Июля 2003, 14:22:24
Может я чего-то не понимаю... но кажется, что в поле name не может быть двух одинаковых имен, либо в полях name+nick не может быть двух одинаковых значений (от задачи зависит), тогда в БД надо сделать эти два поля составным ключом, и выбирать либо по нику либо по имени, сочетание name+nick и будет твоим id! он не обязательно должен быть числом...
XanderЕсли я не прав, поправь...
Название: SELECT определеную строку
Отправлено: Xander от 15 Июля 2003, 14:34:14
Yukko
Это скорее к fidget вопрос, она лучше меня в этом разбирается.
Но я бы с составными ключами связываться не стал. К примеру работать они должны ощутимо медленнее, чем численный ID. Или вот, допустим, надо тебе передать ID скрипту. С числом все ясно, а вот с такой парой уже сложнее - а вдруг там ники на руском?..
 А в какой кодировке клиент их посылает?...

В общем возможны проблемы.

А автор темы так и не сказал, что ему в конечном итоге нужно.
Название: SELECT определеную строку
Отправлено: новичок от 15 Июля 2003, 15:01:11
Не в этом дело...

Дело в том что я скриптом разбираю $n`ую строку в масиве и потом кидаю ее в корзину покупок...
сейчас этот работает на текстовом файле вот так:


   // открыли файл, $n это номер строки
   $f=file("./shop.txt") or die("файл не найден");
   // и получили нужную строку с товаром (в массив $o)
   $o=explode("\\\\",$f[$n]);

   $id=$o[0];
   if (isset($t[all][$id])) return; // если товар уже в корзине - выход

   $t[all][$id]=$id;    // флаг, благодаря которому, двумя строчками выше
                        // мы определили, что товар уже есть в корзине
   $t[$id][name]=$o[1]; // наименование
   $t[$id][info]=$o[2]; // инфо
   $t[$id][cena]=$o[3]; // и д.р. не значащие данные
   $t[$id][kol]=1;      // кол-во в начале равно "1 штуке"

а мне надо просто вывести в переменую $o строку из БД!

Как это сделать?
Название: SELECT определеную строку
Отправлено: fidget от 15 Июля 2003, 16:04:51
Xander, есть два направления по поводу назначения первичных ключей: естественные ключи (в данном случае комбинация имя+ник) и искусственные (ID). Эффективность того или иного подхода зависит от конкретной задачи.


новичок, тебе уже сказали, что нет такого понятия как номер строки в базе данных. Физический порядок размещения данных на диске, конечно есть, а порядка строк в таблице - нет. Потому, для того что бы вывести определенную строку , выбираются критерии выборки. Как тебе уже сказали - это может быть искусственно веденный ID, это может быть комбинация имени и ника и т.д.
опередлись по каким тебе критериям нужно выбирать строку и используй дальше SELECT, WHERE, ORDER BY и LIMIT.
Название: SELECT определеную строку
Отправлено: Xander от 15 Июля 2003, 16:12:20
fidget
а на каких классах задач эффективнее естественные ключи?
Да, я имел в виду задачи, где естественные ключи составные.
Название: SELECT определеную строку
Отправлено: Yukko от 15 Июля 2003, 16:17:06
Цитировать
новичок:
Вопрос, есть строки:
------------------------------
name | nick
------------------------------
sasha | ibsn
anton | bostaf
kozel | sam takoi
...

Цитировать
новичок:
// открыли файл, $n это номер строки
   $f=file("./shop.txt") or die("файл не найден");
   // и получили нужную строку с товаром (в массив $o)
   $o=explode("\\",$f[$n]);

   $id=$o[0];
   if (isset($t[all][$id])) return; // если товар уже в корзине - выход

   $t[all][$id]=$id;    // флаг, благодаря которому, двумя строчками выше
                        // мы определили, что товар уже есть в корзине
   $t[$id][name]=$o[1]; // наименование
   $t[$id][info]=$o[2]; // инфо
   $t[$id][cena]=$o[3]; // и д.р. не значащие данные
   $t[$id][kol]=1;      // кол-во в начале равно "1 штуке"

Мля, почувствуйте разницу!

У любого товара в реальной жизни есть код, по-другому номенклатура. Номенклатура не обязательно должна располагаться по порядку. Тот тавар, который у тя в корзине, и тот который в БД ты можешь сравнить по номенклатуре, т.е. по его коду, вывод информации из БД осуществляется подобным путем:

До тех пор пока есть в корзине товары
 Начало:
 1. запросом, вывести название, вес, и цвет товара, где его  
 номенклатура равняется той, что у тебя в корзине.
 2. показать результаты запроса к БД
 Конец:

Наш преподаватель баз данных говорил:
Цитировать
изучите предеметную область!!!
Название: SELECT определеную строку
Отправлено: SJ от 20 Июля 2003, 20:47:28
новичок
Цитировать
новичок:
открыли файл, $n это номер строки
   $f=file("./shop.txt") or die("файл не найден");
   // и получили нужную строку с товаром (в массив $o)
   $o=explode("\\",$f[$n]);

Я у себя передалял данный скрипт и теперь он у меня работает с базой + там мощный админский интерфейс... от этого скрипта осталась функция добавления товара в корзину, вывода из конзины, а работу с файлом заменил на работу с БД :)

если нужен скрипт интернет-магазина - то могу выложить сам магазин для просмотра, а о цене договоримся...
Если есть вопросы по магазину, то стучи в асю #327830
Название: SELECT определеную строку
Отправлено: Yukko от 20 Июля 2003, 23:00:36
Цитировать
SJ:
а о цене договоримся...

я после обсуждения выше этот интернет-магазин смотреть не хочу... а покупать тем более, у нас в стране нехватка интернет-магазинов наблюдается что ли?
Название: SELECT определеную строку
Отправлено: Phoinix от 21 Июля 2003, 11:35:42
А я вообще использую в качетсве ID обыкновенный счетчик в таблице:

goods_id  MEDIUMINT  NOT NULL AUTO_INCREMENT,

Дешево и сердито... зато голова не болит, какой номер мне присвоить и не будет ли он повторяться, что бы не париться потом с SELECT