Автор Тема: Заявка от 2 таблици  (Прочетена 6892 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

viktor5

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 39
Заявка от 2 таблици
« -: 17 Март 2016, 00:24:35 »
Привет колеги.
Имам 2 таблици с еднакви колони.
table1 (id, ime) и table2 (id, ime)
Правя заявката от едната таблица - вс е ок.
Код: MySQL
  1. $result=mysql_query("SELECT * FROM table1 WHERE ime ORDER BY RAND() limit 1  ");
  2. while($row=mysql_fetch_assoc($result)){
но добавя ли и втората - не става
Код: MySQL
  1. $result=mysql_query("SELECT * FROM table1, table2 WHERE ime ORDER BY RAND() limit 1  ");
  2. while($row=mysql_fetch_assoc($result)){

Къде греша? Как може да се извади резултата и от двете таблици рандом в една заявка?

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: Заявка от 2 таблици
« Отговор #1 -: 17 Март 2016, 00:47:39 »
Здрасти,

Най-вероятно ти казва че имената на колоните не са еднозначни. Може да си сигурен като добавиш няколко проверки да видиш какво всъщност се случва:
Код: PHP
  1. $result = mysql_query("SELECT * FROM table1, table2 WHERE ime ORDER BY RAND() LIMIT 1");
  2. if (!$result) {
  3. }
  4. while($row = mysql_fetch_assoc($result)) {

Ако това е проблемът, ще трябва да изброиш имената на колоните вместо да ги взимаш всички с помощта на астериска (*), даже и с помощта на AS да им сложиш други имена в конкретната заявка -
Код: MySQL
  1. SELECT `table1`.`id` AS `t1id`, `table2`.`id` AS `t2id`...

П.п. Не забравяй, че mysql_ разширението вече е спряно от поддръжка и ползването на функциите му не се препоръчва. Алтернативите са MySQLi и PDO.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

viktor5

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 39
Re: Заявка от 2 таблици
« Отговор #2 -: 17 Март 2016, 01:05:09 »
Благодаря, за бързия отговор!!!
Направих проверката резултата е  - string(48) "Column 'ime' in where clause is ambiguous"    
сега ще пробвам  :)

viktor5

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 39
Re: Заявка от 2 таблици
« Отговор #3 -: 17 Март 2016, 09:31:43 »
Здравейте отново, Пробвам всевъзможни варианти, обаче все ми дава грешки.
Когато добавя WHERE, спира да работи и вади string(48) "Column 'ime' in where clause is ambiguous"
Без него с двете таблици table1, table2 вади само резултати от table2 (без table1)!!?
а при всички други начини вади грешка за синтаксиса - string(226) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version

С версия 5.5.37 съм на mysql (Изчетох и целия мануал, но....  ???), да не би тази версия да има някакви промени??? Възможно ли е?
« Последна редакция: 17 Март 2016, 10:28:19 от viktor5 »

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: Заявка от 2 таблици
« Отговор #4 -: 17 Март 2016, 16:05:53 »
Код: MySQL
Където `ime` е равно на какво? А и това `ime`, не се знае за коя таблица говориш, затова ти казва че не е ясно (ambiguous).

Код: MySQL
  1.     `table1`.`id`   AS `t1_id`,
  2.     `table1`.`ime`  AS `t1_ime`,
  3.     `table2`.`id`   AS `t2_id`,
  4.     `table2`.`ime`  AS `t2_ime`
  5.     `table1`, `table2`
  6.     `t1_ime` = 'Somebody' OR `t2_ime` = 'Somebody else'
  7.  
Това е идеята на AS, даваш различни имена, за да може да кажеш на MySQL какво точно искаш да направиш, иначе си няма на представа
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: Заявка от 2 таблици
« Отговор #5 -: 19 Март 2016, 13:20:32 »
Опитай да направиш JOIN върху ID-то, ако има нещо общо между тях разбира се.

Код: SQL
  1. SELECT
  2. *
  3. FROM
  4. table1 AS t1
  5. INNER JOIN
  6. (
  7.     SELECT
  8.     ROUND(RAND() * (SELECT MAX(id) FROM table2)) AS id
  9. ) AS t2
  10. ON
  11. t1.id >= t2.id
  12. ORDER BY
  13. t1.id ASC
  14. LIMIT 1
  15.  

Ето ти малко материал за четене - an.kneschke.de/projects/mysql/order-by-rand/
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

viktor5

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 39
Re: Заявка от 2 таблици
« Отговор #6 -: 31 Март 2016, 23:33:08 »
Благодаря ВИ! Ще пробвам вариантите и ще пиша за резултата

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Заявка от 2 таблици
« Отговор #7 -: 01 Април 2016, 10:02:14 »
Разгледай варианта на Джаз. Той използва така наречените JOIN клаузи.  Има уроци в сайта за тях.