Вариант за превод

sentenello

Registered
Здравейте,
В момента имам таблица която съдържа мачовете като ги взема от 2 полета
hometeam awayteam

направил съм друга таблица която да ми записва имената на отборите поотделно, за да може да си ги преведа ръчно.

Удачно ли е да направя заявка която да взема всички мачове и в самия цикъл да вкарам друга заявка която да проверява дали името на този отбор го има преведено на български и ако го има да го извежда.
 
Няма смисъл може да го направиш със Subquery в първата заявка.

[sql]
Select *,(SELECT `prevod_name` FROM `preved` WHERE `prevod` IS NOT NULL AND `prevod_id` = `team_id`) as tprevodName FROM `teams`[/sql]

Нещо такова

После с php може да проверяваш само дали е празно вместо да правиш 100 заявкии..
 
Първата ми заявка представлява нещо такова :oops:
Код:
SELECT s.name AS sport_name,
 e.name AS event_name,
 CONCAT(m.hometeam, ' - ', m.awayteam) AS teams,
 TIME (m.start_date) as startovchas,
 DATE(m.start_date) as startovadata,
cyn.name as country,
 GROUP_CONCAT(c.zalogime SEPARATOR ' ') AS zalog,
 GROUP_CONCAT(c.koef SEPARATOR '_') AS koef
	FROM `event` e LEFT JOIN `sport` s ON e.sportid = s.id 
 LEFT JOIN `match` m ON e.id = m.event_id 
 LEFT JOIN `bettype` b ON m.id = b.match_id 
 LEFT JOIN `oddmove` c ON b.id = c.zalogid 
LEFT JOIN `country` cyn ON cyn.divisionid = e.id 
	WHERE e.sportid= '1'
	AND b.name = 'Match Result' 
	AND e.countryEN = '$_GET[league]' 
	AND e.leagueEN = '$_GET[division]' 
 AND m.start_date >= NOW() 
	GROUP BY m.id 
	ORDER by m.start_date ASC,
 e.name ASC

в нея се очаква да включа и нова таблица с име otbori и да сравнявам m.hometeam и m.awayteam с полето teamBG от otbori. В същото време в заявката трябва да задам ако има превод нещо си да взема превода ако ли не, да взема полето на английски. Всичко това ми се вижда адски сложно.
 
Вместо да правиш с JOIN просто го добави преди FROM клаузата като Subquery.
Но Subquery може да вземат само по 1 поле.
 
sentenello каза:
Първата ми заявка представлява нещо такова :oops:
Код:
SELECT s.name AS sport_name,
 e.name AS event_name,
 CONCAT(m.hometeam, ' - ', m.awayteam) AS teams,
 TIME (m.start_date) as startovchas,
 DATE(m.start_date) as startovadata,
cyn.name as country,
 GROUP_CONCAT(c.zalogime SEPARATOR ' ') AS zalog,
 GROUP_CONCAT(c.koef SEPARATOR '_') AS koef
	FROM `event` e LEFT JOIN `sport` s ON e.sportid = s.id 
 LEFT JOIN `match` m ON e.id = m.event_id 
 LEFT JOIN `bettype` b ON m.id = b.match_id 
 LEFT JOIN `oddmove` c ON b.id = c.zalogid 
LEFT JOIN `country` cyn ON cyn.divisionid = e.id 
	WHERE e.sportid= '1'
	AND b.name = 'Match Result' 
	AND e.countryEN = '$_GET[league]' 
	AND e.leagueEN = '$_GET[division]' 
 AND m.start_date >= NOW() 
	GROUP BY m.id 
	ORDER by m.start_date ASC,
 e.name ASC

в нея се очаква да включа и нова таблица с име otbori и да сравнявам m.hometeam и m.awayteam с полето teamBG от otbori. В същото време в заявката трябва да задам ако има превод нещо си да взема превода ако ли не, да взема полето на английски. Всичко това ми се вижда адски сложно.



[sql]SELECT s.name AS sport_name,
e.name AS event_name,
CONCAT(m.hometeam, ' - ', m.awayteam) AS teams,
TIME (m.start_date) as startovchas,
DATE(m.start_date) as startovadata,
cyn.name as country,
GROUP_CONCAT(c.zalogime SEPARATOR ' ') AS zalog,
GROUP_CONCAT(c.koef SEPARATOR '_') AS koef,
(SELECT `полето преведено` FROM `таблицата за превод` WHERE `полето преведено` IS NOT NULL AND `ид-то на превода` = `ид-то на сегашния запис`) as `найменоваш си го както искаш`
FROM `event` e LEFT JOIN `sport` s ON e.sportid = s.id
LEFT JOIN `match` m ON e.id = m.event_id
LEFT JOIN `bettype` b ON m.id = b.match_id
LEFT JOIN `oddmove` c ON b.id = c.zalogid
LEFT JOIN `country` cyn ON cyn.divisionid = e.id
WHERE e.sportid= '1'
AND b.name = 'Match Result'
AND e.countryEN = '$_GET[league]'
AND e.leagueEN = '$_GET[division]'
AND m.start_date >= NOW()
GROUP BY m.id
ORDER by m.start_date ASC,
e.name ASC[/sql]

Това е
 
Дава ми 4 грешки

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in

Warning: array_unique() expects parameter 1

Warning: array_unique() expects parameter 1

Warning: Invalid argument supplied for foreach() in
 
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in

Дай дъмп на променливата и дай си SQL да ти видя..
 
човек, ти още ли се занимаваш с тея мачове, вземи се опитай да направиш нещо различно от тея неща, от 2 години правиш все запитвания за подобни неща, така и не се научи какво да правиш :) :P
 
Успях да направя заявка в цикъла която превежда и двата реда с този код

Код:
$chekhomebgname = mysql_query("select  group_concat(teamBG  Separator '_') as timove from otbori where teamEN in ('$domakinskiqotbor','$gostuvashtiq') ")or die(mysql_error());

обаче имам проблем. Когато вече веднъж е превел дадено има на отбор и после ми го взема него като домакински, дори да е гостуващ. Ето пример.

Crystal Palace - Hull Кристъл Палас - Хъл Сити
Chelsea - Crystal Palace Кристъл Палас - Челси

Тъй като в таблицата с преводите реда с Кристъл Палас е преди този на Челси, и във втория мач ми ги вади обратно.
 
Не търсиш ли нещо такова?
PHP:
$chekhomebgname = mysql_query("SELECT * FROM `otbori` WHERE `teamEN`='$val[domakina]' OR `teamEN`='$val[gost]'")or die(mysql_error());
$rowata = mysql_fetch_array($chekhomebgname);
$otbor = $rowata['teamBG'];
echo"$otbor";
$otbor или е равен на домакина или на госта заради клаузата WHERE нещо OR друго нещо :)
 
В слуая в първата таблица имам

домакин гост
Liverpool Arsenal

а във втората имам

otbor otborbg
Liverpool Ливърпул
Arsenal Арсенал

затова с моята заявка групирам двете бг имена от втората таблица, и ги извеждам после с екплоуд 1 по 1. С OR вземам или единия или другия, и не знам как точно да го нагодя да го превежда.
 
sentenello каза:
В слуая в първата таблица имам

домакин гост
Liverpool Arsenal

а във втората имам

otbor otborbg
Liverpool Ливърпул
Arsenal Арсенал

затова с моята заявка групирам двете бг имена от втората таблица, и ги извеждам после с екплоуд 1 по 1. С OR вземам или единия или другия, и не знам как точно да го нагодя да го превежда.
А защо не искараш в масив от първата таблица с преводите нещата като например:
заявка към таблицата за превод с извеждане в масив
$bgprevod = array(
'Arsenal' => 'Арсенал'
);

заявка за превод викане
$otbor = $bgprevod[$row['otborzaprevod']];
 
sentenello написа:
В слуая в първата таблица имам

домакин гост
Liverpool Arsenal

а във втората имам

otbor otborbg
Liverpool Ливърпул
Arsenal Арсенал

затова с моята заявка групирам двете бг имена от втората таблица, и ги извеждам после с екплоуд 1 по 1. С OR вземам или единия или другия, и не знам как точно да го нагодя да го превежда.

А защо не искараш в масив от първата таблица с преводите нещата като например:
заявка към таблицата за превод с извеждане в масив
$bgprevod = array(
'Arsenal' => 'Арсенал'
);

заявка за превод викане
$otbor = $bgprevod[$row['otborzaprevod']];

Това е пълна глупост нали след време като станат 200 отбора и на всяка страница да смъкваш това Query и отиде бързодействието на сайта.
 
skynet каза:
sentenello написа:
В слуая в първата таблица имам

домакин гост
Liverpool Arsenal

а във втората имам

otbor otborbg
Liverpool Ливърпул
Arsenal Арсенал

затова с моята заявка групирам двете бг имена от втората таблица, и ги извеждам после с екплоуд 1 по 1. С OR вземам или единия или другия, и не знам как точно да го нагодя да го превежда.

А защо не искараш в масив от първата таблица с преводите нещата като например:
заявка към таблицата за превод с извеждане в масив
$bgprevod = array(
'Arsenal' => 'Арсенал'
);

заявка за превод викане
$otbor = $bgprevod[$row['otborzaprevod']];

Това е пълна глупост нали след време като станат 200 отбора и на всяка страница да смъкваш това Query и отиде бързодействието на сайта.
Като цяло си е глупост но не и нещо кой знае колко тежко. Така или иначе ще прави конекция той всеки път няма да я прави в цикъла а веднъж ще я изкара масива и после ще проверява дали има в масива това име и ще го превежда като вади отборите. Реално с JOINT ще е по-бързо спор няма но и това което съм дал като варянт не е трудно да връща масив от една заявка да прави ключивоете и готово. Тежко ще е но не говорим за 200 заявки а за една.
 
Говорим за масив от 200 реда който всеки път ще се завърта в цикъл за да се сглоби.Отделно имаш заявка да вземеш тези 200 реда от дб на 200 няма да е бавно но мине ли хиляда и почват главоболията.
 
Sentello дай SQL на таблиците за да си направим конекцията. Така само плямпотим.
 
CREATE TABLE IF NOT EXISTS `match` (
`id` int(11) NOT NULL,
`event_id` int(11) NOT NULL,
`hometeam` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`awayteam` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`start_date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `event_id` (`event_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE IF NOT EXISTS `otbori` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`teamEN` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`teamBG` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`priority` int(11) NOT NULL DEFAULT '20',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2193 ;
 
Това търсеше нали? :)
Едно бързо и просто решение на проблема. Ако си направиш една заявка която да ти го прави ще ускориш нещата. Може да ънсетваш масива след използването му за да си освободиш памет. По този начин даже ще си правиш и проверка дали Имаш превод на отбора или не. Грубо решение но работи.
PHP:
<?php 
$dbhost = "localhost"; 
$dbuser = "root@localhost";  
$dbpass = ""; 
$dbname = "test"; 

mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname) or die(mysql_error());
mysql_query("SET NAMES UTF8");  
echo '<pre>';
$query = mysql_query('SELECT * FROM `otbori`');
$translate = array();
while($row = mysql_fetch_array($query)){
	$translate[$row['teamEN']] = $row['teamBG'];
}
$query2 = mysql_query('SELECT * FROM `match`');
while($row2 = mysql_fetch_array($query2)){
	echo '<br>'.$translate[$row2['hometeam']].'-'.$translate[$row2['awayteam']];
}
 ?>
 
1 професионален съвет от мен хвани някой фреймуорк като ларавел спри с това процедурно пишеш като хамал за този дето духа хвани изучи 1 фреймуорк отнема не повече от 2-3 часа да навлезеш в материала и седмица да го освойш пишеш в пъти по малко код придава ти добри навици в писането и най вече че с модела те учи как да структурираш базата данни по правилно въпреки че няма как да те научи на всичко.
 
skynet каза:
1 професионален съвет от мен хвани някой фреймуорк като ларавел спри с това процедурно пишеш като хамал за този дето духа хвани изучи 1 фреймуорк отнема не повече от 2-3 часа да навлезеш в материала и седмица да го освойш пишеш в пъти по малко код придава ти добри навици в писането и най вече че с модела те учи как да структурираш базата данни по правилно въпреки че няма как да те научи на всичко.
Към мен или автора е насочено това :) Предполагам, че е към автора.
 

Back
Горе