字符串不重复拼接法?
比如有以下数据表结构
id lei shuxing miaoshu
1 大象 眼睛 大大的
2 大象 眼睛 圆圆的
3 大象 鼻子 高高的
4 熊 鼻子 小小的
5 大象 腿 长长的
6 熊 腿 细细的
7 大象 嘴 小小的
第二列和第三列和第四列都可能有n多种情况,求一个能实现出以下要求组合的php方法,要求是每个描述是一个lei,涵盖shuxing中的3项(不够三项有几个算几个比如熊),以生成对某个动物的不同描述
举例说明:按以上数据的结果应该是
大象 眼睛大大的,鼻子高高的,腿长长的
大象 眼睛圆圆的,鼻子高高的,腿长长的
大象 眼睛大大的,鼻子高高的,嘴小小的
。。。
由于能组合出不少,就没法一一列出了,通过以上的例子希望朋友们能理解
回复内容:
比如有以下数据表结构
id lei shuxing miaoshu
1 大象 眼睛 大大的
2 大象 眼睛 圆圆的
3 大象 鼻子 高高的
4 熊 鼻子 小小的
5 大象 腿 长长的
6 熊 腿 细细的
7 大象 嘴 小小的
第二列和第三列和第四列都可能有n多种情况,求一个能实现出以下要求组合的php方法,要求是每个描述是一个lei,涵盖shuxing中的3项(不够三项有几个算几个比如熊),以生成对某个动物的不同描述
举例说明:按以上数据的结果应该是
大象 眼睛大大的,鼻子高高的,腿长长的
大象 眼睛圆圆的,鼻子高高的,腿长长的
大象 眼睛大大的,鼻子高高的,嘴小小的
。。。
由于能组合出不少,就没法一一列出了,通过以上的例子希望朋友们能理解
建造者模式http://www.runoob.com/design-pattern/builder-pattern.html
<code>select lei,group_concat(concat(shuxing,miaoshu)) result from tb group by lei</code>
这样可以返回
lei result
大象 眼睛大大的,鼻子高高的,腿长长的, 嘴小小的
熊 鼻子小小的,腿细细的
...
返回到后台通过逗号分割result,然后随机拼接三条结果
---以上个人见解,欢迎点评---
其实还是没太看懂题主到底是问php问题还是sql问题。
不过感觉sql并不擅长解决这类问题,那我就假设是编程问题吧。
由于不懂php,所以仅提供解题思路:
1、根据lei查询所有符合条件的数据,例如:
SELECT lei, shuxing, miaoshu FROM animal WHERE lei IN ('大象', '熊');
2、在代码里先后对lei
属性和shuxing
属性做group by
操作,如下:
{ "大象": { "眼睛": ["大大的", "圆圆的"], "鼻子": ["高高的"], "腿": ["长长的"], "嘴": ["小小的"] }, "熊": { ... } }
3、对2中的数据进行笛卡尔积运算,done.
PS:其实是表结构设计得不好,应该拆分成animal
表(animal_id
, animal_name
)和animal_prop
表(animal_prop_id
, animal_id
, prop_name
, prop_desc
)。
可以采用分表,分成三张表。table1:用来记录lei的信息 table2:用来记录shuxing,table1的ID table3:
用来记录miaoshu,table2的ID,用着三张表进行关联查询
各位朋友,有能帮忙解决一下的没?
对啊 上楼说的是个思路
分表
然后根据表进行关联查询
把类单独拿出来建一张表
类的属性再建一张表(1对多关系)
python 版本:
<code>from collection import defaultdict anims = defaultdict(lambda : defaultdict(lambda : defaultdict(set))) for lei, shuxing, miaoshu in db.select('table', ['lei', 'shuxing', 'miaoshu']): anims[lei][shuxing].add(miaoshu) # enum all descs for lei, v1 in anims.items(): print 'desc lei: ', lei shuxings = [(k, list(v)) for k,v in v1.items()] shuxing_size = len(shuxings) if shuxing_size == 0: pass elif shuxing_size == 1: for i in range(shuxing_size): for ii in range(shuxings[i][1]): print shuxings[i][0], shuxings[i][1][ii] elif shuxing_size == 2: for i in range(shuxing_size): for j in range(i+1, shuxing_size): for ii in range(shuxings[i][1]): for jj in range(shuxings[j][1]): print shuxings[i][0], shuxings[i][1][ii], shuxings[j][0], shuxings[j][1][jj] else: for i in range(shuxing_size): for j in range(i+1, shuxing_size): for k in range(j+1, shuxing_size): for ii in range(shuxings[i][1]): for jj in range(shuxings[j][1]): for kk in range(shuxings[k][1]): print shuxings[i][0], shuxings[i][1][ii], shuxings[j][0], shuxings[j][1][jj], shuxings[k][0], shuxings[k][1][kk]</code>

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

Navicat selbst speichert das Datenbankkennwort nicht und kann das verschlüsselte Passwort nur abrufen. Lösung: 1. Überprüfen Sie den Passwort -Manager. 2. Überprüfen Sie Navicats "Messnot Password" -Funktion; 3.. Setzen Sie das Datenbankkennwort zurück; 4. Kontaktieren Sie den Datenbankadministrator.

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

Schritte zur Durchführung von SQL in Navicat: Verbindung zur Datenbank herstellen. Erstellen Sie ein SQL -Editorfenster. Schreiben Sie SQL -Abfragen oder Skripte. Klicken Sie auf die Schaltfläche Ausführen, um eine Abfrage oder ein Skript auszuführen. Zeigen Sie die Ergebnisse an (wenn die Abfrage ausgeführt wird).

Sie können eine neue MySQL -Verbindung in Navicat erstellen, indem Sie den Schritten folgen: Öffnen Sie die Anwendung und wählen Sie eine neue Verbindung (Strg N). Wählen Sie "MySQL" als Verbindungstyp. Geben Sie die Hostname/IP -Adresse, den Port, den Benutzernamen und das Passwort ein. (Optional) Konfigurieren Sie erweiterte Optionen. Speichern Sie die Verbindung und geben Sie den Verbindungsnamen ein.

Häufige Gründe, warum Navicat keine Verbindung zur Datenbank und ihren Lösungen herstellen kann: 1. Überprüfen Sie den laufenden Status des Servers. 2. Überprüfen Sie die Verbindungsinformationen; 3. Passen Sie die Firewall -Einstellungen ein; 4. Konfigurieren Sie den Remote -Zugriff; 5. Fehlerbehebung mit Netzwerkproblemen; 6. Berechtigungen überprüfen; 7. Sicherheitskompatibilität sicherstellen; 8. Fehlerbehebung bei anderen Möglichkeiten.

MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Um eine Verbindung zu einer lokalen MySQL -Datenbank mit Navicat herzustellen: Erstellen Sie eine Verbindung und legen Sie den Verbindungsnamen, den Host, den Port, den Benutzernamen und das Passwort fest. Testen Sie die Verbindung, um sicherzustellen, dass die Parameter korrekt sind. Speichern Sie die Verbindung. Wählen Sie eine neue Verbindung aus der Verbindungsliste aus. Doppelklicken Sie auf die Datenbank, mit der Sie eine Verbindung herstellen möchten.
