Выборка из двух таблиц MySQL

12
WC
На сайте с 26.07.2013
Offline
10
1256

Есть две таблицы countries и cities нужно, чтобы на странице страны отображались города которые к ней относятся. Сейчас при создании страницы страны использую такую функцию

    function get_country($id)

{
db_connect();

$query = ("SELECT * FROM countries WHERE iso='$id' ");


$result = mysql_query($query);

$row = mysql_fetch_array($result);

return $row;

}

--------------------------------------------------------

Так подключаю

<?php

$id = $_GET['id'];
$country = get_country($id);
?>

Но как сделать выборку из таблицы с городами не могу понять....

У обеих страниц общее поле iso

Очень нужна ваша помощь!

olympteka
На сайте с 08.06.2013
Offline
16
#1

SELECT c.f1 AS f1, c.f2 AS f2, ci.f1 AS f1, ci.f2 AS f2

FROM countries AS c

LEFT JOIN cities AS ci ON c.iso=ci.iso

WHERE c.iso='$id'

где c.f1 AS f1, c.f2 AS f2, ci.f1 AS f1, ci.f2 AS f2 необходимые поля из соответствующих таблиц - как они там озаглавлены и какие нужны вам виднее

dkameleon
На сайте с 09.12.2005
Offline
386
#2
WebCreativo:
Сейчас при создании страницы страны использую такую функцию

хотя бы интвал делайте, а то взломают вас.

Дизайн интерьера (http://balabukha.com/)
WC
На сайте с 26.07.2013
Offline
10
#3
olympteka:
SELECT c.f1 AS f1, c.f2 AS f2, ci.f1 AS f1, ci.f2 AS f2
FROM countries AS c
LEFT JOIN cities AS ci ON c.iso=ci.iso
WHERE c.iso='$id'

где c.f1 AS f1, c.f2 AS f2, ci.f1 AS f1, ci.f2 AS f2 необходимые поля из соответствующих таблиц - как они там озаглавлены и какие нужны вам виднее

Сделал как вы написали

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.iso AS iso, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' ");

Но к сожалению выводит просто буквы(A и C) в списке вместо названий городов.

Для вывода использую

<?php 

$id = $_GET['id'];
$country = get_country($id);
foreach($country as $item):?>
<li class="hl-list-list-item"><a href="<?php echo $item['name']?>"><?php echo $item['name']?></a></li>
<?php endforeach;?>


---------- Добавлено 31.12.2013 в 02:46 ----------

dkameleon:
хотя бы интвал делайте, а то взломают вас.

Не могли бы вы написать, как обезопасить от взлома, где можно почитать про интвал

olympteka
На сайте с 08.06.2013
Offline
16
#4

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.iso AS iso, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' "); - уберите второе iso,

т.е

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' ");//название результативных полей не повторять

если iso не нужно, можете в селекте вообще его исключить

при выводе в шаблоне, как я понимаю = $item['local_name'] - для страны, $item['name'] - для города

Делайте хотябы так для числовых значений

$id = (int)$_GET['id'];

хотя iso строковое, тогда использовать можно

if(strlen($_GET['id'])!=3 OR !preg_match("/^([a-z])+$/",$_GET['id']))

{

die('Убейтесь об стену');

}

где 3 - кол-во символов, или в ISO их 2?, [a-z] - только строковые, если нужны и заглавные, тогда[A-Za-z]

WC
На сайте с 26.07.2013
Offline
10
#5
olympteka:
$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.iso AS iso, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' "); - уберите второе iso,

т.е

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' ");//название результативных полей не повторять
если iso не нужно, можете в селекте вообще его исключить

при выводе в шаблоне, как я понимаю = $item['local_name'] - для страны, $item['name'] - для города

Делайте хотябы так для числовых значений
$id = (int)$_GET['id'];

---------- Добавлено 31.12.2013 в 03:18 ----------

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.iso AS iso, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' "); - уберите второе iso,

т.е

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' ");//название результативных полей не повторять
если iso не нужно, можете в селекте вообще его исключить

при выводе в шаблоне, как я понимаю = $item['local_name'] - для страны, $item['name'] - для города

Делайте хотябы так для числовых значений
$id = (int)$_GET['id'];

хотя iso строковое, тогда использовать можно
if(strlen($_GET['id'])!=3 OR !preg_match("/^([a-z])+$/",$_GET['id']))
{
die('Убейтесь об стену');
}
где 3 - кол-во символов, или в ISO их 2?, [a-z] - только строковые, если нужны и заглавные, тогда[A-Za-z]

Сделал, все как вы написали, но выводит только буквы B

bay_ebook
На сайте с 28.05.2010
Offline
111
#6
olympteka:

хотя iso строковое, тогда использовать можно
if(strlen($_GET['id'])!=3 OR !preg_match("/^([a-z])+$/",$_GET['id']))
{
die('Убейтесь об стену');
}
где 3 - кол-во символов, или в ISO их 2?, [a-z] - только строковые, если нужны и заглавные, тогда[A-Za-z]

Жесть, а mysql_real_escape_string уже не прикольно? Или религия не позволяет?

WebCreativo:
Сделал, все как вы написали, но выводит только буквы B

нужно показывать как, а то не понятно, что написать :)

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
olympteka
На сайте с 08.06.2013
Offline
16
#7
bay_ebook:
Жесть, а mysql_real_escape_string уже не прикольно? Или религия не позволяет?

Позволяет, но только в запросе.

bay_ebook
На сайте с 28.05.2010
Offline
111
#8
olympteka:
Позволяет, но только в запросе.

хм, а мы сейчас про что говорим? :)

olympteka
На сайте с 08.06.2013
Offline
16
#9
WebCreativo:
Сделал, все как вы написали, но выводит только буквы B

сделайте print_r($country). В массиве тоже буквы?

---------- Добавлено 31.12.2013 в 03:40 ----------

bay_ebook:
хм, а мы сейчас про что говорим? :)

Ну пусть будет только про запрос :)

WC
На сайте с 26.07.2013
Offline
10
#10
olympteka:
сделайте print_r($country). В массиве тоже буквы?

Выводит вот такое

Array ( [0] => PT [iso] => PT [1] => Portugal [local_name] => Portugal [2] => [name] => )

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий