小编Rob*_*Rob的帖子

将连接表的结果限制为一行

这是一个简化的表结构:

TABLE products (
 product_id INT (primary key, auto_increment),
 category_id INT,
 product_title VARCHAR,
 etc
);

TABLE product_photos (
 product_photo_id (primary key, auto_increment),
 product_id INT,
 photo_href VARCHAR,
 photo_order INT
);
Run Code Online (Sandbox Code Playgroud)

一个产品可以有多张照片,每张产品的第一张产品照片(基于photo_order)是默认照片.

现在,我只需要产品详细信息页面上的所有照片,但在我列出多个产品的页面上,例如产品目录页面,我只想显示默认照片.

所以我要做的是查询产品列表,包括每个产品的默认照片.

这显然不起作用,它将返回所有照片与每张照片的产品信息重复:

SELECT p.*, ph.*
FROM products AS p
LEFT JOIN product_photos AS ph
ON p.product_id=ph.product_id
ORDER BY p.product_title ASC
Run Code Online (Sandbox Code Playgroud)

我需要弄清楚如何做这样的事情,但我不知道语法(或者是否可能)

SELECT p.*, ph.*
FROM products AS p
LEFT JOIN product_photos AS ph
    ON p.product_id=ph.product_id  **ORDER BY ph.photo_order ASC LIMIT 1**
ORDER BY p.product_title ASC
Run Code Online (Sandbox Code Playgroud)

编辑:我在下面的答案帮助下找到了解决方案,谢谢大家!

SELECT p.*, ph.* …
Run Code Online (Sandbox Code Playgroud)

mysql sql

19
推荐指数
2
解决办法
3万
查看次数

CSS不透明度和子元素

<style type="text/css">
div#foo {
    background: #0000ff;
    width: 200px;
    height: 200px;

    opacity: 0.30;
    filter: alpha(opacity = 30);
}
div#foo>div {
    color: black;
    opacity:1;
    filter: alpha(opacity = 100);
}
</style>

<div id="foo">
    <div>Lorem</div>
    <div>ipsum</div>
    <div>dolor</div>
</div>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,不透明度div#foo由子元素继承,导致文本几乎不可读.我认为说它是继承的是错误的,不透明度应用于父div而子节点是其中的一部分,因此尝试为子元素覆盖它不起作用,因为从技术上讲它们是不透明的.

在这种情况下,我通常只使用alpha png背景图像,但今天我想知道是否有更好的方法来使div的背景半透明而不影响内容.

css transparency background alpha-transparency

17
推荐指数
3
解决办法
1万
查看次数

需要对MySQL索引进行一些澄清

我最近一直在考虑我的数据库索引,过去我只是非常挑衅地把它们作为事后的想法投入,并且如果它们是正确的甚至是帮助的话,从来没有真正考虑过.我读过相互矛盾的信息,有人说更多的索引更好,而其他索引也不好,所以我希望得到一些澄清,并在这里学到一点.

假设我有这个假设的表格:

CREATE TABLE widgets (
    widget_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    widget_name VARCHAR(50) NOT NULL,
    widget_part_number VARCHAR(20) NOT NULL,
    widget_price FLOAT NOT NULL,
    widget_description TEXT NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我通常会为将要连接的字段和最常排序的字段添加索引:

ALTER TABLE widgets ADD INDEX widget_name_index(widget_name);
Run Code Online (Sandbox Code Playgroud)

现在,在一个查询中,例如:

SELECT w.* FROM widgets AS w ORDER BY w.widget_name ASC
Run Code Online (Sandbox Code Playgroud)

widget_name_index是用来排序的结果集.

现在,如果我添加搜索参数:

SELECT w.* FROM widgets AS w 
WHERE w.widget_price > 100.00 
ORDER BY w.widget_name ASC
Run Code Online (Sandbox Code Playgroud)

我想我需要一个新的索引.

ALTER TABLE widgets ADD INDEX widget_price_index(widget_price);
Run Code Online (Sandbox Code Playgroud)

但是,它会使用两个索引吗?据我了解,它不会......

ALTER TABLE widgets ADD INDEX …
Run Code Online (Sandbox Code Playgroud)

mysql database indexing database-design

6
推荐指数
1
解决办法
269
查看次数

Mysql从多个表中选择行

我正在一个用户可以浏览类别的目录网站上工作.类别可以包含其他类别和产品,产品可以属于多个类别.相关的数据库模式如下所示:

CREATE TABLE products (
    product_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    product_title VARCHAR(100) NOT NULL,
    product_status TINYINT UNSIGNED NOT NULL
);

CREATE TABLE product_categories (
    category_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    parent_category_id INT UNSIGNED NOT NULL,
    category_title VARCHAR(100) NOT NULL,
    category_status TINYINT UNSIGNED NOT NULL,
    category_order INT UNSIGNED NOT NULL
);

CREATE TABLE products_categories (
    product_id INT UNSIGNED NOT NULL,
    category_id INT UNSIGNED NOT NULL,
    product_order INT UNSIGNED NOT NULL,
    PRIMARY KEY(product_id, category_id)
);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我需要使用LIMIT …

mysql sql

0
推荐指数
1
解决办法
4020
查看次数

使用自定义事件模拟domready事件(mootools)

我需要触发一次仅与domready事件类似的自定义事件,因为如果在事件发生后添加了新事件,则会立即触发它们.

这是为了某些代码在初始化某些数据和资源之前无法执行,所以我想做这样的事情:

// I am including a script (loadResources.js) to load data and other resources,
// when loadResources.js is done doing it's thing it will fire resourcesAreLoaded with:
window.fireEvent('resourcesAreLoaded');

window.addEvent('resourcesAreLoaded', function() {
    // this is fine 
});
$('mybutton').addEvent('click', function() {
    window.addEvent('resourcesAreLoaded', function() {
        // this is not fine, because resourcesAreLoaded has already fired
        // by the time the button is clicked
    });
});
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想resourcesAreLoaded运行domready,并在事件已经触发时立即执行代码:

window.addEvent('testIsReady', function() {
    alert('firing test');       
});
window.fireEvent('testIsReady');
window.addEvent('test', function() {
    // this …
Run Code Online (Sandbox Code Playgroud)

javascript events mootools

0
推荐指数
1
解决办法
1672
查看次数