Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выборка, с понтом LIMIT 1
 
 автор: sl1p   (11.11.2009 в 01:19)   письмо автору
 
 

есть такие данные в таблице

id     id_var     lang     value

13     1          2        en
12     1          1        ua
11     1          0        ru
21     2          -1       no_lang

как выбрать всё по одному?
тоесть если 3 записи с разными языками(lang) то нужно выбрать только одну запись с языком равным "0".
если -1 то эту запись...

такая запись почему-то выбирает всё
SELECT a.*, b.`lang`, b.`value` FROM `vars` as a, `vars_value` as b WHERE b.`lang` = 0 OR b.`lang` = -1 ORDER BY a.`var`

  Ответить  
 
 автор: Gendalf   (11.11.2009 в 02:47)   письмо автору
 
   для: sl1p   (11.11.2009 в 01:19)
 

Ваш запрос вернет только

11     1          0        ru 
21     2          -1       no_lang

а вам что нужно? Если вам нужно всего одну запись, но с приоритетом где есть -1, то тогда сортируйте по колонке lang


SELECT a.*, b.`lang`, b.`value` FROM `vars` as a, `vars_value` as b WHERE b.`lang` = 0 OR b.`lang` = -1 ORDER BY b.lang LIMIT 1

  Ответить  
 
 автор: Trianon   (11.11.2009 в 08:42)   письмо автору
 
   для: sl1p   (11.11.2009 в 01:19)
 

За запятую между именами таблиц в списке FROM нужно расстреливать. Деревянными пулями.
До тех пор, пока люди не научатся читать учебник прежде, чем писать SQL-запросы.
В 99% случаях человек, применивший запятую, неподумав слизал кусок запроса откуда-то.

  Ответить  
 
 автор: sl1p   (12.11.2009 в 00:31)   письмо автору
 
   для: Trianon   (11.11.2009 в 08:42)
 

значит мой случай является из оставшихся 1%
:)

ну это логично. Учебник не вижу смысла читать, со сложными запросами не сталкиваюсь, а так просто логично.
Зачем тогда работает если это не правильно?)

  Ответить  
 
 автор: Trianon   (12.11.2009 в 00:58)   письмо автору
 
   для: sl1p   (12.11.2009 в 00:31)
 

>значит мой случай является из оставшихся 1%

не является.

>ну это логично. Учебник не вижу смысла читать, со сложными запросами не сталкиваюсь, а так просто логично.

Простите, что именно логично?

>Зачем тогда работает если это не правильно?)

Так ведь в программировании как... если неправильно написано , вовсе не факт, что работать вообще не будет.
Может работать неправильно.
Может работать правильно.
Может не работать.

Вот если правильно написано, то ничего не остается, кроме как рабортать правильно.

  Ответить  
 
 автор: Gendalf   (12.11.2009 в 13:30)   письмо автору
 
   для: Trianon   (12.11.2009 в 00:58)
 

можно ламерский вопрос, я никогда не писал список таблиц через запятую. всегда писал типа t1 JOIN t2 ON t1.id = t2.id.
Так вот я задумался, а как происходит связывание таблиц, когда их перечисляют через запятую?

  Ответить  
 
 автор: Valick   (12.11.2009 в 13:37)   письмо автору
 
   для: Gendalf   (12.11.2009 в 13:30)
 

грубо говоря каждую строку одной таблицы соединяет с каждой строкой другой...
если таблицы две по 1000 записей в каждой, то
1000 х 1000
если таблицы три, то
1000 х 1000 х 1000
и тд.
____
в калькуляторе моего телефона 1000 х 1000 х 1000 вызывает числовое переполнение

  Ответить  
 
 автор: Trianon   (12.11.2009 в 13:44)   письмо автору
 
   для: Gendalf   (12.11.2009 в 13:30)
 

примерно так t1 JOIN t2 ON 1

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования