PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (17): В начало « ... 7 8 9 10 [11] 12 13 14 15 ... » В конец

> Найдено сообщений: 255
UNTRUSTED Отправлено: 18 Марта, 2012 - 15:49:14 • Тема: Вопрос о типах данных! • Форум: SQL и Архитектура БД

Ответов: 17
Просмотров: 96
Вообщем много уже начитал в интернете, но хотелось бы поставить точку и собрать все в кучу. Надеюсь вы мне с этим поможетеУлыбка
Вопрос состоит в выборе типа для столбцов.
Первое:
Если в поле будет только 2 значения (1/0), то лучше использовать:
CODE (htmlphp):
скопировать код в буфер обмена
  1. CHAR(0)+NULL //(NULL/'') По идее занимает 0 байт, но под null отводиться место
  2. BOLEAN+NOT NULL // (0/1) Самый частораспространенный вариант 1 байт
  3. ENUM('1') || ('0','1') //(''/1) || (0/1) Вот тоже хороший вариант, но не советуют использовать в ENUM и SET цифры почему-то??


Второе:
Если поле тоже для двух значения, но не цифр, а например М/Ж:
CODE (htmlphp):
скопировать код в буфер обмена
  1. CHAR(0)+NULL // (NULL/'')
  2. CHAR(1) // (М/Ж)
  3. BOLEAN+NOT NULL //(0/1)
  4. ENUM('М','Ж') //(М/Ж)


Третье:
Если в поле будет 3 значения (0/1/2):
CODE (htmlphp):
скопировать код в буфер обмена
  1. CHAR(1) // (0/1/2)
  2. BOLEAN+NULL // (NULL/0/1)
  3. TINIINT(1)+NOT NULL //(0/1/2)
  4. ENUM('1','2')+NULL //(NULL/1/2)
  5. ENUM('1','2')+NOT NULL //(''/1/2)
  6. ENUM('0','1','2')+NOT NULL //(0/1/2)


Четвертое:
тоже 3 значения:
CODE (htmlphp):
скопировать код в буфер обмена
  1. CHAR(1) // (0/М/Ж)
  2. BOLEAN+NULL // (NULL/0/1)
  3. TINIINT(1)+NOT NULL //(0/1/2)
  4. ENUM('М','Ж')+NULL //(NULL/М/Ж)
  5. ENUM('М','Ж')+NOT NULL //(''/М/Ж)
  6. ENUM('Нет','М','Ж')+NOT NULL //(Нет/М/Ж)


Пятое:
несколько всегда определенных значений вот такого вида - от 00000 до 11111 т.е. так (00100,00001,10110,10010)
CODE (htmlphp):
скопировать код в буфер обмена
  1. CHAR(5) // (00000/11111)
  2. SMALLINT(5)+NOT NULL+UNSIGNED ZEROFILL //(00000/11111) Тут обязательно ZEROFILL иначе все нули слева обрезаются!!!
  3. BINARY(5) // (00000/11111)


Шестое:
тоже самое только (Хлеб,Колбаса,Мясо,Молоко,Вода) и можно выбрать несколько
CODE (htmlphp):
скопировать код в буфер обмена
  1. CHAR(9) // (00000000/111111111)
  2. SMALLINT(9)+NOT NULL+UNSIGNED ZEROFILL //(000000000/111111111)
  3. BINARY(9) // (000000000/11111111)
  4. SET('1','2','3'...'9') // (1/1 и 2/2/1 и 4 и 9/4 и 5 и 6 и 9/9)
  5. SET(Хлеб,Колбаса,Мясо,Молоко,Вода) // (Хлеб/Хлеб и Колбаса/Мясо/Молоко и Вода) // впринципе удобно, но вот SELECT'ом потом сложно будет выбирать чем с цифрами, например ("SELECT * FROM table WHERE column = 'Мясо') причем записывать почему-то в INSERT можно, а выбирать нельзя (тоесть, если в INSERT напишешь валуе 1, то он запишет Хлеб, 01 - Колбаса и.т.д, а в селект напишеш = 1 , скажет что нет у нас таких???) Ваше мнение если нужно будет потом по нему выборку делать и если не нужно будет!! Если не нужно будет, мне кажется оптимальный вариант


Ну и седьмое:
Тоже самое, но можно выбрать только одно
CODE (htmlphp):
скопировать код в буфер обмена
  1. VARCHAR(х) // ('Текст')
  2. TINIINT(1)+NOT NULL //(0/1/2/3/.../9)
  3. ENUM('1','2','3'...'9') // (1/2/3/.../9)
  4. ENUM(Хлеб,Колбаса,Мясо,Молоко,Вода) // (Хлеб/Колбаса/Мясо/Молоко/Вода)


Вообщем вроде все. Надеюсь понятно получилось? Я старался поподробней все написать!
Буду рад услышать все ваши мнения по данному вопросу, по всем вариантам.
UNTRUSTED Отправлено: 17 Марта, 2012 - 16:51:57 • Тема: Синтаксис Оператора SELECT • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 86
Спасибо! Буду знать!
UNTRUSTED Отправлено: 17 Марта, 2012 - 12:42:08 • Тема: Синтаксис Оператора SELECT • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 86
То есть LIMIT он применяет уже после того как всю базу перебрал?
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM table
  3. SELECT * FROM table LIMIT 1

В обоих случаях он сперва выберет все значения, просто во втором случае выведет один?

И ответ на мой вопрос, что не надо писать LIMIT 1, если сравнение происходит по PRIMARY индексу?!
UNTRUSTED Отправлено: 17 Марта, 2012 - 01:11:58 • Тема: Синтаксис Оператора SELECT • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 86
UNTRUSTED пишет:
PRIMARY KEY

Слышали такое слово??
(Добавление)
Если пишешь лимит 1 допустим, он находит 1 значение и останавливается, дальше не ищет в базе... А если не пишешь, то он всю базу перелопачивает! Так вот если ты пишешь

Или

Поле id является примари индексом!
Есть ли в этих запросах разница?
Понятен теперь вопрос мой??
UNTRUSTED Отправлено: 17 Марта, 2012 - 01:10:29 • Тема: Конструкция switch-case • Форум: Вопросы новичков

Ответов: 35
Просмотров: 1241
sKaa, Спасибо за идею! Теперь есть что еще выучить...
А вот с switch мучался-мучался!
Дошел только до такого, хотя это впринципе почти тоже что if-else получаетсяУлыбка
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. switch(true){
  4.   case($a[0] == 0 && ...):{
  5.     ... break;
  6.   }
  7.   case($a[0] == 1 && ...):{
  8.     ... break;
  9.   }
  10.   case($...[0] == 2 && ...){
  11.     ... break;
  12.   }
  13.   default:{
  14.     break;
  15.   }
  16. ?>
  17.  

Но во всяком случае, ближе к истине ужеУлыбка
UNTRUSTED Отправлено: 17 Марта, 2012 - 01:01:16 • Тема: Синтаксис Оператора SELECT • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 86
OrmaJever пишет:
SELECT

[ALL | DISTINCT | DISTINCTROW ]

[HIGH_PRIORITY]

[STRAIGHT_JOIN]

[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

select_expr [, select_expr ...]

[FROM table_references

[WHERE where_condition]

[GROUP BY {col_name | expr | position}

[ASC | DESC], ... [WITH ROLLUP]]

[HAVING where_condition]

[ORDER BY {col_name | expr | position}

[ASC | DESC], ...]

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

[PROCEDURE procedure_name(argument_list)]

[INTO OUTFILE 'file_name'

[CHARACTER SET charset_name]

export_options

| INTO DUMPFILE 'file_name'

| INTO var_name [, var_name]]

[FOR UPDATE | LOCK IN SHARE MODE]]

И где здесь ответ зарыт?
Описание темы пишет:

Нужно ли указывать LIMIT 1 если выбираешь поле `PRIMARY KEY` = '...' ?
UNTRUSTED Отправлено: 17 Марта, 2012 - 00:47:58 • Тема: Синтаксис Оператора SELECT • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 86
Никто не знает! Что то не нашел.
По идее он сам же должен знать что Primary индекс может быть только 1?
CODE (SQL):
скопировать код в буфер обмена
  1. [PHP]
  2. SELECT * FROM TABLE WHERE PRIMARY.INDEX = ...[/PHP]
UNTRUSTED Отправлено: 16 Марта, 2012 - 19:26:56 • Тема: Конструкция switch-case • Форум: Вопросы новичков

Ответов: 35
Просмотров: 1241
А кто-нибудь скажет про if-else или нет?
Как все-таки лучше и бысрее?
Упрощу для читабельности:
PHP:
скопировать код в буфер обмена
  1.  
  2. ###ПЕРВЫЙ ВАРИАНТ###
  3.  
  4. if(
  5.    ($a[0] == 0 && ...) ||
  6.    ($a[0] == 1 && ...) ||
  7.    ($a[0] == 2 && ...)
  8.      ){
  9.        if($a[0] == 0){...}
  10.        elseif($a[0] == 1){...}
  11.        elseif($a[0] == 2){...}
  12. }
  13.  
  14. elseif(
  15.       ($a[1] == 0 && ...) ||
  16.       ($a[1] == 1 && ...) ||
  17.       ($a[1] == 2 && ...)
  18.          ){
  19.            if($a[1] == 0){...}
  20.            elseif($a[1] == 1){...}
  21.            elseif($a[1] == 2){...}
  22. }
  23.  
  24. ###ВТОРОЙ ВАРИАНТ###
  25.  
  26.     if($a[0] == 0 && ...){...}
  27. elseif($a[0] == 1 && ...){...}
  28. elseif($a[0] == 2 && ...){...}
  29. elseif($a[1] == 0 && ...){...}
  30. elseif($a[1] == 1 && ...){...}
  31. elseif($a[1] == 2 && ...){...}
  32.  

Теперь понятней вроде немного! Еще раз повторю, это не мой код, а написан для понятности сути вопроса ==>> "Какой вариант лучше и бысрей?"
UNTRUSTED Отправлено: 16 Марта, 2012 - 19:13:55 • Тема: Конструкция switch-case • Форум: Вопросы новичков

Ответов: 35
Просмотров: 1241

DelphinPRO пишет:
UNTRUSTED пишет:
вы бы даже никогда не догадались о схожести с данным примером.
UNTRUSTED пишет:
какой смысл приводить в пример код, не имеющий ничего общего с оригиналом?
Ну во-первых ни ничего, а во вторых:
противоречие налицо
впрочем это к теме не относится

Где тут противоречие?
Я же не сказал что код идентичный, а лишь что
UNTRUSTED пишет:
ни ничего

То есть что-то общее он имеет!
UNTRUSTED Отправлено: 16 Марта, 2012 - 19:10:30 • Тема: Конструкция switch-case • Форум: Вопросы новичков

Ответов: 35
Просмотров: 1241
то есть так все-таки никак не реализовать? Проблемы
UNTRUSTED Отправлено: 16 Марта, 2012 - 18:55:00 • Тема: Конструкция switch-case • Форум: Вопросы новичков

Ответов: 35
Просмотров: 1241
Блин, ну почти везде можно проверять несколько условий!
Неужели в switch нельзя?
Еще раз пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. switch($var1 && ($var2 || $var3))
  3. case var1 var2 var3 : ...
  4.  

Как это реализовать без использования вложенных switch'ей?
UNTRUSTED Отправлено: 16 Марта, 2012 - 18:44:40 • Тема: Конструкция switch-case • Форум: Вопросы новичков

Ответов: 35
Просмотров: 1241
В for игнорируется первое условие и работает пока не выполниться второе!
Либо может как-то можно записать. в документации этого ничего нет, сам додумывайся.

Вот допустим в while если написать вот так
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr = array(1,2,3,4,5,6,7,8,9,10,11);
  3. $i = 0;
  4. $x = 2;
  5. while (($x > 0) && (isset($arr[$i]))) {
  6.    $i+=2; $x--;
  7.     echo "i = $i, arr[i] = {$arr[$i]}, x = $x<br />";
  8. }
  9.  

То все прекрасно работает
И выводит
Opera пишет:

i = 2, arr = 3, x = 1
i = 4, arr[i] = 5, x = 0

[i](Добавление)

Да, в for с && работат! Смущён
Может все таки и в switch тогда можно?
(Добавление)
DelphinPRO пишет:
какой смысл приводить в пример код, не имеющий ничего общего с оригиналом?

Ну во-первых ни ничего, а во вторых:
Чтобы знать, возможно ли так сделать или нет? // Это по switch несколько условий
Чтобы знать, как работает быстрей! // Это if-else
UNTRUSTED Отправлено: 16 Марта, 2012 - 18:33:48 • Тема: Конструкция switch-case • Форум: Вопросы новичков

Ответов: 35
Просмотров: 1241
DeepVarvar пишет:
Ну вот пример с двумя условиями в for:
PHP:
скопировать код в буфер обмена

$arr = array(1,2,3,4,5,6,7,8,9,10,11);
for ($i = 0, $x = 100; $x > 0, isset($arr[$i]); $i+=2, $x--) {
echo "i = $i, arr = {$arr[$i]}, x = $x<br />";

}

Идите читайте документацию по конструкциям языка.

УмникУлыбка попробуйте вот так сперва х=2 поставить! Вот такой результат получите!
PHP:
скопировать код в буфер обмена
  1.  
  2. i = 0, arr[i] = 1, x = 2
  3. i = 2, arr[i] = 3, x = 1
  4. i = 4, arr[i] = 5, x = 0
  5. i = 6, arr[i] = 7, x = -1
  6. i = 8, arr[i] = 9, x = -2
  7. i = 10, arr[i] = 11, x = -3
  8.  

[i](Добавление)

Так что это вы
DeepVarvar пишет:

Идите читайте документацию по конструкциям языка.
UNTRUSTED Отправлено: 16 Марта, 2012 - 17:47:24 • Тема: Конструкция switch-case • Форум: Вопросы новичков

Ответов: 35
Просмотров: 1241
sKaa, а я бы сказал, что вы ничерта не умеете различать пример кода от кода!
Приходиться писать такие коды чтобы понимали, о чем я задаю вопрос, а то отвечают не то что спрашивал.
В данном примере:
PHP:
скопировать код в буфер обмена
  1.  
  2. switch($a && $b){
  3.  
  4.   case "1" && "2" : ... //и так пробовал
  5.  
  6.   case "2" "3" : ... // и так
  7.  

Я имел ввиду - можно ли проверить два условия?
В документации ничего об этом нет.
Вот в for, знаю, нельзя два условия, а вот допустим в while можно!
А вот этот пример
sKaa пишет:
if(($a[0] == 0 && $b >= 0) || ($a[0] == 1 && $b >= 10 && $c >= 0) || ($a[0] == 2 && $b >= 100 && $c >= 50)){
if($a[0] == 0){...}
elseif($a[0] == 1){...}
elseif($a[0] == 2){...}
elseif(($a[1] == 0 && $b >= 500 && $c == 100) || ($a[1] == 1 && $b >= 500 && $c >= 200) || ($a[1] == 2 && $b >= 5000 && $c >= 1000)){
if($a[1] == 0){...}
elseif($a[1] == 1){...}
elseif($a[1] == 2){...}

Вместе с этим
sKaa пишет:
if($a[0] == 0 && $b >= 0){...}
elseif($a[0] == 1 && $b >= 10 && $c >= 0){...}
elseif($a[0] == 2 && $b >= 100 && $c >= 50){...}
elseif($a[1] == 0 && $b >= 500 && $c >= 100){...}
elseif($a[1] == 1 && $b >= 1000 && $c >= 200){...}
elseif($a[1] == 2 && $b >= 5000 && $c >= 1000){...}

Здесь имеется ввиду какой пример будет работать быстрее, несколько больших if-else, или много маленьких if-else. И неважно, что написано, цифры и буквы здесь для наглядности. И если бы вы оригинальный код увидели, вы бы даже не нашли схожести с данным примером.
UNTRUSTED Отправлено: 16 Марта, 2012 - 05:29:59 • Тема: Вопрос по кодировкам • Форум: Вопросы новичков

Ответов: 10
Просмотров: 574
Морозов Семен пишет:
и в конечном счете в метатеге html записать вот это:
CODE (html):
скопировать код в буфер обмена
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Браузеры уже давно meta теги игнорят!

Страниц (17): В начало « ... 7 8 9 10 [11] 12 13 14 15 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB